假设我们有以下代码:
struct A{
virtual ~A(){}
void f(){
p = 42;
}
int p;
};
struct B : public virtual A{};
struct C : public virtual A{};
struct D : public B, public C, public A{}; //let's add non-virtual inheritance
int main(){
D* pA = new D();
pA->A::f(); //!
return 0;
}
有没有办法在最基类A中将p设置为42? 以下构造pA-> A :: f();对于非虚拟继承的类A,将p设置为42.我们可以在没有强制转换的情况下执行此操作吗
答案 0 :(得分:3)
首先,没有演员阵容:你只要符合你想要的A
版本,因为不止一个版本。当然,您选择的符号实际上不起作用,因为它首先不能解决歧义。我想你的意思是使用像
pA->B::f();
如果您不想承担选择调用班级用户的成员函数的负担,则必须为D
提供合适的转发功能,例如:
void D::f() { this->B::f(); }