寻找比C++中的虚拟继承更好的方法

Imb*_*bue 4 c++ inheritance multiple-inheritance

好吧,我在C++中有一个有点复杂的系统.简而言之,我需要向第三方抽象基类添加方法.第三方还提供了大量也需要新功能的派生类.

我正在使用一个提供标准Shape接口的库,以及一些常见的形状.

class Shape
{
    public:
        Shape(position);
        virtual ~Shape();

        virtual position GetPosition() const;
        virtual void SetPosition(position);

        virtual double GetPerimeter() const = 0;

    private: ...
};

class Square : public Shape
{
    public:
        Square(position, side_length);
    ...
};

class Circle, Rectangle, Hexagon, etc
Run Code Online (Sandbox Code Playgroud)

现在,这是我的问题.我希望Shape类还包含GetArea()函数.所以看起来我应该做一个:

class ImprovedShape : public virtual Shape
{
    virtual double GetArea() const = 0;
};

class ImprovedSquare : public Square, public ImprovedShape
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后我去制作一个继承自ImprovedShape和Square的ImprovedSquare.好吧,正如你所看到的,我现在已经创建了可怕的钻石继承问题.如果第三方库为其Square,Circle等使用虚拟继承,则可以很容易地解决这个问题.但是,让他们这样做并不是一个合理的选择.

那么,当您需要向库中定义的接口添加一些功能时,您会怎么做?有一个很好的答案吗?

谢谢!

Dav*_*ier 7

为什么这个类需要从形状派生出来?

class ImprovedShape : public virtual Shape
{
    virtual double GetArea() const = 0;
};
Run Code Online (Sandbox Code Playgroud)

为什么不呢

class ThingWithArea 
{
    virtual double GetArea() const = 0;
};
Run Code Online (Sandbox Code Playgroud)

ImprovedSquare是一个Shape,是一个ThingWithArea