c++ - 虚函数实现和多重继承

标签 c++ polymorphism multiple-inheritance virtual-functions

我有一个类 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/

相关文章:

c++ - 使用扩展的 sprite 类重载难度。这怎么错了?

c++ - C++ 中的自定义异常

java - 从子类到父类(super class)获取浮点属性

c++ - vector 删除错误

c++ - 错误 : expected primary-expression before 'decltype'

c++ - 使用带有 STL 容器的 boost.serialization 作为模板参数

c# - 多态性和依赖注入(inject)

java - 为什么我在编译时遇到类型不匹配的问题

java - 如何在 java 中使用扩展相同但具有不同通用参数的接口(interface)扩展 2?

c++ - C++中指向数组对象的指针