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

Multiple inheritence using parent class method override

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

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;
}

然后我有提供该功能的具体 classes:

class parent : public parent_interface {
 public:
  void foo() override;
};

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

问题是如果我尝试实例化一个 child1 对象,我会得到一个编译器错误

cannot declare field instantiation_name to be of abstract type because the following virtual functions are pure within child1: void foo()

我可以通过在 child1 中创建一个名为 foo 的方法来解决这个问题,它只调用 parent::foo,但我想知道是否有更清晰的解决方案来解决这个问题。

您需要指定 virtual 继承,以便编译器知道将基础 类 组合回一个。这应该为您编译 (see it work):

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
  {
  }
};

有关详细信息,您可以在此处阅读有关 Virtual Base Classes 的内容。