C++ 类设计:类成员从同一基类继承

C++ 类设计:类成员从同一基类继承,c++,inheritance,class-design,C++,Inheritance,Class Design,我正在考虑一个适合以下情况的类设计:假设我想创建一个类似于(数学)函数的类设计。所有函数都派生自基类函数。现在我们可以想到一个函数FuncB,它是FuncA的多个对象的总和。在我的例子中,FuncB和FuncA是相当复杂的对象,但我当前的实现归结为: class Function { virtual double value() = 0; }; class FuncA : public Function { public: virtual double value() {ret

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

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;
};
类函数
{
虚拟双值()=0;
};
类FuncA:公共函数
{
公众:
虚拟双值(){return v;}
私人:
双v;
};
B类:公共函数
{
虚拟双值(){
双结果=0;
用于(自动i:v)
结果+=i.值();
返回结果;
}
私人:
std::向量v;
};

不知何故,我会认为这是一个糟糕的类设计,因为<代码>函数Bux/Cux>有一个成员,它继承了与类本身相同的基类。有什么建议可以更优雅地解决这个问题吗?

复合设计模式

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


    ...

    std::vector< bestType > subTypes;
};

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

这是复合设计模式。。。这是相当有名的
std::vectorv会更有用。<代码>不知怎么我会认为这是一个坏的类设计,因为函数B有一个成员,它继承了与类本身相同的基类。< /代码>为什么?在运行时它必须是可重新配置的,还是在编译时你知道你想要什么样的函数?@ MulbDNILO使用<代码> Stave<代码>必须是
return std::accumulate(v.begin(),v.end(),0.0,[](双结果,const auto&f){return result+f.value();})。我想我更喜欢OP的代码。
obj->draw(); // draw house from various lines and boxes.