【发布时间】:2018-01-08 16:52:50
【问题描述】:
我遇到了多重继承问题,如果有人能帮助我,那就太好了。我正在编写一个最终归结为类似于此的情况
class A {
public:
A(){}
virtual ~A() = 0;
virtual void print()=0;
};
A::~A(){}
class B: public virtual A {
public:
B():A(){}
virtual ~B() = 0;
virtual void print() {
cout << "Hello" << endl;
}
};
B::~B(){}
class C: public virtual A {
public:
C():A(){}
virtual ~C() = 0;
virtual void print () {
cout << "Bye" << endl;
}
};
C::~C(){}
class D: public B, public C {
public:
D():B(),C(){}
virtual ~D(){}
virtual void print(){}
};
int main()
{
D d;
A* a = &d;
a->B::print(); //The statement leads to errors
a->C::print(); //The statement leads to errors
}
我需要访问 B 类和 C 类中虚函数的实现。有没有办法做到这一点?
【问题讨论】:
-
投射指针?
-
D* a = &d;解决了这个问题。 -
你能给B版本一个你可以调用的别名或备用名称吗?
-
嗨@maxim,实际上继承链很大,A 实际上继承自一堆其他类。我想实际上从上层类动态调度
print()的执行,并且没有指向 D 的指针,这会杀死调度
标签: c++ multiple-inheritance diamond-problem