我有一个类 F,它需要实现两个函数 f() 和 g()。我使用两个不同的类来实现这些功能。
class Base {public: virtual void f(); virtual void g(); };
class A : public virtual Base { void f(){/***/} };
class B : public virtual Base { void g(){/***/} };
f() 需要调用 g(),反之亦然,使用这种设计就可以了。我需要对 A 类和 B 类进行多个实现,比如 A1 和 A2、B1 和 B2。例如,如果我想使用 A1 和 B2 实现:
class Test : public A1, public B2 {};
我的问题是: 如何在运行时选择实现?如果我想创建一个类 Test 的对象,并想根据主函数中的参数选择 A 类和 B 类,我该怎么做?
最佳答案
不要使用继承,而是将对象传递给构造函数中的委托(delegate):
class Test : public Base
{
Base *impl;
public:
Test( Base *impl ) : impl( impl ) { }
virtual void f() { impl->f(); }
virtual void g() { impl->g(); }
// assignment operator, copy ctor etc.
};
在你的 main
函数中你可以做
int main() {
// ...
Test *t;
if ( someCondition ) {
t = new Test( new A() );
} else {
t = new Test( new B() );
}
t->f();
t->g();
}
关于c++ - 虚函数实现和多重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31074712/