多重继承:使用私有基的成员函数
Multiple inheritance: using a member function of a private base
这是我的问题:
#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。
你能想到其他可能性吗?
using 声明将 B::f
函数添加到类范围中以进行查找,但该函数仍然是B::f
,而不是C::f
。您可以在派生类型中定义实现并转发到B::f
实现,否则您必须更改继承层次结构,以便B
和C
(虚拟地)从A
继承。
void C::f() { B::f(); } // simple forwarding implementation
相关文章:
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 将公共但非静态的成员函数与ALGLIB集成
- 使用指向成员的指针将成员函数作为参数传递
- 将重载的成员函数传递给函数模板
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 如何在C++中使用非静态成员函数作为回调函数
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 关联容器的下界复杂性:成员函数与非成员函数
- 在 C++ 中用派生类型重写成员函数
- 链表的泛型函数remove()与成员函数remove)
- 如何将lambda作为模板类的成员函数参数
- constexpr构造函数需要常量成员函数时出现问题
- 将自由函数绑定为类成员函数
- 区分非成员函数和头文件中的成员函数
- 如何从子成员函数修改父公共成员变量
- 保留对其他类的成员函数的引用
- 在运算符重载定义中使用成员函数(const错误)
- 内联如何影响模块接口中的成员函数
- 将成员函数指针作为参数传递给模板方法