类设计:类成员继承自同一基类

Class design: Class member inherits from the same base class

本文关键字:基类 成员 继承      更新时间:2023-10-16

我正在为以下情况考虑一个合适的类设计:假设我想创建一个类似(数学(函数的类设计。所有函数都派生自基类Function。现在可以想到函数CCD_ 2,它是CCD_。在我的例子中,FuncBFuncA是相当复杂的对象,但我当前的实现可以归结为:

class Function
{
virtual double value() = 0;
};
class FuncA : public Function
{
public:
virtual double value() {return v;}
private:
double v;
};
class FuncB : public Function
{
virtual double value() {
double result = 0;
for( auto i : v)
result += i.value();
return result;
}
private:
std::vector<DerivedA> v;
};

不知怎的,我会认为这是一个糟糕的类设计,因为FuncB有一个成员继承自与类本身相同的基类。有什么建议可以更优雅地解决这个问题吗?

复合设计模式

class ContainerOfX : public X {
typedef X* bestType;
// maybe...
// typedef std::shared_ptr<X> bestType;

...
std::vector< bestType > subTypes;
};

它允许您创建一个绘图系统-不同形状的复合对象可以被视为agregate

obj->draw(); // draw house from various lines and boxes.

它允许您为do/undo逻辑创建一个简单的脚本。