Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“导入”从基类中定义函数以实现抽象接口(C++中的多重继承)_C++_Inheritance_Abstract Class_Multiple Inheritance_Pure Virtual - Fatal编程技术网

“导入”从基类中定义函数以实现抽象接口(C++中的多重继承)

“导入”从基类中定义函数以实现抽象接口(C++中的多重继承),c++,inheritance,abstract-class,multiple-inheritance,pure-virtual,C++,Inheritance,Abstract Class,Multiple Inheritance,Pure Virtual,假设我们有一个类继承自两个基类多重继承。基类A是抽象的,声明一个纯虚函数foo,另一个基类B声明并实现一个具有相同签名的函数foo struct A { virtual void foo(int i) = 0; }; struct B { virtual void foo(int i) {} }; struct C : public A, public B {}; 我想在派生类C中使用基类B的foo实现。但是,如果我不在派生类C中第二次实现函数foo,我就不能实例化它的任何对象,因

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

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

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

struct C : public A, public B {};
我想在派生类C中使用基类B的foo实现。但是,如果我不在派生类C中第二次实现函数foo,我就不能实例化它的任何对象,因为它仍然是抽象的。虚拟继承在这里没有帮助,因为类A和类B没有公共基类

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


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

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

< > C++中最好的选择是通过转发到b::fo:< /p>来定义c::fo。
struct C : public A, public B
{
  virtual void foo(int i) { B::foo(i); }
};