好吧,我在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
现在,这是我的问题.我希望Shape类还包含GetArea()函数.所以看起来我应该做一个:
class ImprovedShape : public virtual Shape { virtual double GetArea() const = 0; }; class ImprovedSquare : public Square, public ImprovedShape { ... }
然后我去制作一个继承自ImprovedShape和Square的ImprovedSquare.好吧,正如你所看到的,我现在已经创建了可怕的钻石继承问题.如果第三方库为其Square,Circle等使用虚拟继承,则可以很容易地解决这个问题.但是,让他们这样做并不是一个合理的选择.
那么,当您需要向库中定义的接口添加一些功能时,您会怎么做?有一个很好的答案吗?
谢谢!
为什么这个类需要从形状派生出来?
class ImprovedShape : public virtual Shape { virtual double GetArea() const = 0; };
为什么不呢
class ThingWithArea { virtual double GetArea() const = 0; };
ImprovedSquare是一个Shape,是一个ThingWithArea