2013-11-08 2 views
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 
}; 

и класс Группа наследуется RenderObject дважды. Я знаю, что это обычная проблема в множественном наследовании, но я действительно не знаю, как ее решить, так как я впервые сталкиваюсь с этим. Даже зная, что это распространенная проблема, я не смог найти решение, которое рассматривает предыдущую реализацию в одном из родителей (IGroup).

Решение с объяснением того, как работает эта языковая механика, будет оценено по достоинству.

+0

поиск 'виртуальный inheritance' – billz

ответ

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

Смежные вопросы