使用父类方法覆盖的多重继承

Multiple inheritence using parent class method override

本文关键字:多重继承 覆盖 类方法 父类      更新时间:2023-10-16

假设我有以下类层次结构,其中我有一个接口,然后对该接口的进一步专业化,以保证更多功能:

class parent_interface {
 public:
  virtual void foo() = 0;
};
class child1_interface : public parent_interface {
 public:
  virtual void bar() = 0;
};
class child2_interface : public parent_interface {
 public:
  virtual void baz() = 0;
}

然后我有具体类别提供该功能:

class parent : public parent_interface {
 public:
  void foo() override;
};
class child1 : public parent, public child1_interface {
 public:
  //using parent::foo; ??
  void bar() override;
};

问题是,如果我尝试实例化child1对象,我会发现编译器错误

无法将字段 instantiation_name声明为抽象类型,因为以下虚拟函数在child1中是纯粹的:void foo((

我可以通过在Child1中创建一种称为foo的方法来解决此问题,该方法称为parent :: foo,但我想知道是否有更清洁的解决方案。

您需要指定virtual继承,以便编译器知道将基本类结合回一个。这应该为您编译(请参阅起作用(:

class parent_interface {
 public:
  virtual void foo() = 0;
};
class child1_interface : public virtual parent_interface {
 public:
  virtual void bar() = 0;
};
class parent : public virtual parent_interface {
 public:
  void foo() override
  {
  }
};
class child1 : public parent, public child1_interface {
 public:
  //using parent::foo; ??
  void bar() override
  {
  }
};

有关更多信息,您可以在此处阅读有关虚拟基类的信息。