3

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

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

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

struct C : public A, public B {};

我想在派生中使用foofrom base的实现。但是,如果我没有在派生中第二次实现该函数,我将无法实例化它的任何对象(它仍然是抽象的)。虚拟继承在这里没有预期的帮助(并且没有公共基类)。class Bclass Cfooclass Cclass Aclass B

我想知道是否有一种方法可以“导入” foofrom class Binto的实现,class C以便不必重复相同的代码。

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

4

1 回答 1

2

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

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

struct C : public A, public B
{
  virtual void foo(int i) { B::foo(i); }
};
于 2010-07-20T15:28:26.113 回答