我有以下情况:
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)中的先前实现。
解释这个语言机制如何工作的解决方案将不胜感激。
答案 0 :(得分:1)
答案 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
};
请查看以下链接以获取更多信息: