c++ - "import"从基类定义一个函数来实现抽象接口(interface)(C++中的多重继承)

标签 c++ inheritance abstract-class multiple-inheritance pure-virtual

假设我们有一个继承自两个基类的类(多重继承)。基础class A是抽象的,声明了一个纯虚函数foo,另一个基础class B声明并实现了一个函数foo 具有完全相同的签名。

struct A
{
  virtual void foo(int i) = 0;
};

struct B
{
  virtual void foo(int i) {}
};

struct C : public A, public B {};

我想在派生的 C 类 中使用来自基类 Bfoo 的实现。但是,如果我没有在派生的 class C 中第二次实现函数 foo,我就无法实例化它的任何对象(它仍然是抽象的)。虚拟继承在这里没有像预期的那样帮助(class Aclass B 没有公共(public)基类)。

我想知道是否有一种方法可以将 foo 的实现从 B 类“导入”到 C 类 中,以便不重复相同的代码。

上面的例子当然是人为设计的。我想在 class B 中实现 foo 的原因是我想派生 class D : public B 并使用 class Bfoo 的实现。我知道继承(主要)不是为了代码重用,但我仍然想以这种方式使用它。

最佳答案

在 java 中,您的示例代码有效。在 C++ 中它没有。这些语言之间的细微差别。

您在 C++ 中的最佳选择是通过转发到 B::foo() 来定义 C::foo():

struct C : public A, public B
{
  virtual void foo(int i) { B::foo(i); }
};

关于c++ - "import"从基类定义一个函数来实现抽象接口(interface)(C++中的多重继承),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10539728/

相关文章:

c++ - 无法生成完整的静态链接应用程序

c++ - 什么是 __kernel_vsyscall?

c++ - 海湾合作委员会错误 "expected ' )' before ' [' token"

c++ - 如何使子类与 C++ 中的父类互换?

javascript - 可以对继承建模吗?

c++ - 在 C++ 中注册派生类

c++ - 以明显的方式反转位

java - Play Framework 2.1.0 看不到派生类中的静态方法

Python抽象装饰不起作用

c++ - 为什么纯虚函数初始化为0?