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等使用虚拟继承,则可以很容易地解决这个问题.但是,让他们这样做并不是一个合理的选择.
那么,当您需要向库中定义的接口添加一些功能时,您会怎么做?有一个很好的答案吗?
谢谢!
为什么这个类需要从形状派生出来?
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