假设我们有以下代码:
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。我们可以在不强制转换的情况下做到这一点吗?
最佳答案
首先,没有转换:您只需限定您想要的 A
版本,因为有多个版本。当然,您选择的符号实际上不起作用,因为它首先没有解决歧义。我猜你是想用类似的东西
pA->B::f();
如果您不想让类的用户承担选择调用哪个成员函数的负担,则必须为 D
提供合适的转发函数,例如:
void D::f() { this->B::f(); }
关于c++ - 虚拟继承和签名重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9759023/