【问题标题】:Virtual Classes Multiple Inheritance虚拟类多重继承
【发布时间】:2013-11-19 21:56:09
【问题描述】:

我有以下情况:

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

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

【问题讨论】:

  • 搜索virtual inheritance

标签: c++ class inheritance interface virtual


【解决方案1】:

这是需要虚拟继承的经典示例。

通过提供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

【讨论】:

    【解决方案2】:

    Object3D 和 IGroup 需要虚拟继承:

    class Object3D : virtual public RenderObject
    

    IBM C++: Virtual Base Class

    【讨论】:

      猜你喜欢
      • 2011-10-15
      • 2017-03-31
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 2012-10-11
      • 2014-11-06
      相关资源
      最近更新 更多