0

次のシナリオがあります。

class RenderObject {
  public:
    virtual void sendToGPU() = 0;
    virtual void removeFromGPU() = 0;
};

class Object3D : public RenderObject {
  public:
    virtual char getType() = 0;
};

class IGroup : public RenderObject {
  public:
    void sendToGPU(); // implementation of RenderObject's virtual method
    void removeFromGPU(); // implementation of RenderObject's virtual method
};

class Group : public Object3D, public IGroup {
  public:
    char getType(); // implementation of Object3D's virtual method
};

Group クラスは RenderObject を 2 回継承しています。多重継承でよくある問題であることは知っていますが、初めて直面するので、解決方法が本当にわかりません。よくある問題だとわかっていても、親の 1 つ (IGroup) での以前の実装を考慮した解決策を見つけることができませんでした。

この言語の仕組みがどのように機能するかを説明したソリューションをいただければ幸いです。

4

2 に答える 2

0

これは、仮想継承が必要な典型的な例です。

キーワードを指定するvirtualことで、あいまいな階層の問題を解消できます。

コードを次のように変更します。

class Object3D : public virtual RenderObject {
  public:
    virtual char getType() = 0;
};

class IGroup : public virtual RenderObject {
  public:
    void sendToGPU(); // implementation of RenderObject's virtual method
    void removeFromGPU(); // implementation of RenderObject's virtual method
};

詳細については、次のリンクを確認してください。

仮想継承リンク

于 2013-11-08T01:11:34.477 に答える