这是我的问题:
#include <iostream>
using namespace std;
class A {
public:
virtual void f() = 0;
};
class B {
public:
void f() {cout << "Hello world!" << endl;};
};
class C : public A, private B {
public:
using B::f; // I want to use B::f as my implementation of A::f
};
int main() {
C c; // error: C is abstract because f is pure virtual
c.f();
}
到目前为止,我找到了两个解决方法:
在C类中定义一个只调用B :: f的函数f。但这很乏味而且不那么干净(特别是在为一堆功能做这件事时)
B继承自A和C继承自B(所有公共)。对我而言,它并不代表设计。特别是,B不是A,我不希望B依赖A。
你能想到其他任何可能性吗?
答案 0 :(得分:3)
using声明是将B::f
函数添加到类作用域中以进行查找,但该函数仍然是B::f
,而不是C::f
。您可以在派生类型中定义实现并转发到B::f
实现,否则您必须更改继承层次结构,以便B
和C
从({虚拟)继承{{} 1}}。
A