虚拟功能实现和多重继承
Virtual function implementation and multiple inheritance
我有一个类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类,我该怎么做?
不要使用继承,而是在构造函数中传递要委托的对象:
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();
}
对于虚拟类,唯一可行的选择是定义所有可能的排列,如:
class TestA1B1 : public A1, public B1 {};
class TestA1B2 : public A1, public B2 {};
...
并具有类似的织物功能
Base* create(int p1, int p2) {
if( p1 == 1 && p2 == 1 )
return TestA1B1();
else if( p1 == 1 && p2 == 2 )
return TestA1B2();
...
return nullptr;
}
但我会考虑自由函数集而不是
void f_a1(Base* ptr);
void g_b1(Base* ptr);
并将指向它们的指针存储在Base中。
相关文章:
- 关于C++中具有多重继承"this"指针的说明
- C++中模板化异常类的多重继承
- 虚拟继承中是否存在多重继承?
- 如何在 c++ 多重继承中调用父非虚函数?
- 多重继承相同的方法名,没有歧义
- 使用enable_if解决多重继承歧义
- C++ 多重继承:使用基类 A 的实现实现基类 B 的抽象方法
- 有没有办法实现从 c++ 中其他抽象类多重继承的抽象类?
- 实现具有多重继承的纯虚函数
- 使用多重继承实现实体组件编程
- GCC 看不到通过多重继承实现
- 如何使用多重继承实现多态行为
- C++的多重继承和多重实现编译但崩溃
- C++:实现多重继承时的最佳实践
- 虚函数表实现多重继承
- 多重继承和指针实现
- 如何正确实现多重继承
- 虚拟功能实现和多重继承
- 如何在多重继承中实现具有相同名称的虚拟函数
- 来自同一父级的多重继承-合并实现