簡體   English   中英

虛擬類多重繼承

[英]Virtual Classes Multiple Inheritance

我有以下這種情況:

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兩次。 我知道這是多重繼承中的一個常見問題,但是我真的不知道如何解決它,因為這是我第一次面對它。 即使知道這是一個常見問題,我也找不到解決方案,該解決方案考慮了其中一個父級(IGroup)的先前實現。

一個解釋這種語言機制如何工作的解決方案將不勝感激。

Object3D和IGroup需要虛擬繼承:

class Object3D : virtual public RenderObject

IBM C ++:虛擬基類

這是需要虛擬繼承的經典示例。

通過提供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
};

檢查以下鏈接以獲取更多信息:

虛擬繼承鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM