在多重继承中从派生类函数调用适当的父类函数

use*_*661 3 c++ inheritance multiple-inheritance

假设我有以下类:

class Base {
  virtual void func() { cout << "func base" << endl; }
};

class A : virtual public Base {
  public:
  virtual void func() { cout << "func A" << endl; }
};

class B : virtual public Base {
  public:
  virtual void func() { cout << "func B" << endl; }
};

class C : public A, public B {
  C(bool is_a);
  public:
  virtual void func() { // Call appropriate parent's func here }
};
Run Code Online (Sandbox Code Playgroud)

我的要求是func()当我调用C时调用适当的父类函数func().这就是我的意思:

Base* ptr = new C(true /*is_a*/);
ptr->func(); // This should call A's func internally
Run Code Online (Sandbox Code Playgroud)

怎么做到这一点?它甚至可能吗?

[编辑]

这可能更像是一个设计问题.众所周知,C类只有一个真正的父(A或B).并且取决于哪个是父,我希望调用该函数.欢迎任何替代设计建议.

我从A和B派生C,因为有一些共同的功能,A和B共享,哪些不能成为基类的一部分.

and*_*eee 6

你需要A::func()明确地打电话.

class C : public A, public B {
  public:
  virtual void func() { A::func(); }
};
Run Code Online (Sandbox Code Playgroud)

更新(给你):

你真的想要实现什么?您想解决一个实际问题吗?

如果你知道"C类只有一个真正的父母",为什么你需要首先从A和B派生出来?尽管Aconcagua的答案有效,但它看起来更像是一个没有在您身边正确陈述的问题的解决方法.如果您正在处理类的不同实现,您不想使用某种模式(如策略模式)吗?