类设计:类成员继承自相同的基类

时间:2017-08-30 10:19:10

标签: c++ inheritance class-design

我正在考虑针对以下情况进行适当的类设计:假设我想创建一个类似于(数学)函数的类设计。所有函数都派生自基类Function。现在可以想到一个函数FuncB,它是FuncA的多个对象的总和。在我的情况下,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有一个成员,它继承自与类本身相同的基类。有什么建议如何解决这个更优雅?

1 个答案:

答案 0 :(得分:1)

复合设计模式

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.

它允许您创建一个简单的脚本,用于执行/撤消逻辑。