虚拟类多重继承

时间:2013-11-08 00:58:44

标签: c++ class inheritance interface virtual

我有以下情况:

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)中的先前实现。

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

2 个答案:

答案 0 :(得分:1)

Object3D和IGroup需要实际继承:

class Object3D : virtual public RenderObject

IBM C++: Virtual Base Class

答案 1 :(得分: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
};

请查看以下链接以获取更多信息:

Virtual Inheritance Link