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 两次。我知道这是多重继承中的一个常见问题,但我真的不知道如何解决它,因为这是我第一次面对它。即使知道这是一个常见问题,我也找不到考虑到其中一个父母(IGroup)中先前实现的解决方案。

一个解释这种语言机制如何工作的解决方案将不胜感激。

4

2 回答 2

1

Object3D 和 IGroup 需要虚拟继承:

class Object3D : virtual public RenderObject

IBM C++:虚拟基类

于 2013-11-08T01:07:37.557 回答
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 回答