OK、私は 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 を継承する ImprovementSquare を作成します。さて、ご覧のとおり、恐ろしいダイヤモンドの継承問題を作成しました。これは、サード パーティのライブラリが Square や Circle などに仮想継承を使用している場合、簡単に修正できます。しかし、それを実行させるのは合理的な選択肢ではありません。
では、ライブラリで定義されたインターフェイスにちょっとした機能を追加する必要がある場合はどうすればよいでしょうか? 良い答えはありますか?
ありがとう!