在 C++ 中,带有虚基的多重继承 我明白为什么这段代码可能不明确,但为什么当我专门调用派生类方法时它仍然会提示?
class A {
public:
virtual void f() { cout << 1 ;}
};
class B :virtual public A {
public:
virtual void f() { cout << 2; }
};
class C :virtual public A {
public:
virtual void f() { cout << 3; }
};
class D : public B, public C {};
void main(){
D* d = new D();
d->B::f();
getch();
}
我希望它会运行 B:f() 方法,但我得到: “‘void A::f(void)’的继承不明确
最佳答案
问题是你的函数是虚拟的,这意味着它会覆盖 vtable 中的地址。您不能用两个函数覆盖一个地址。
如果没有 virtual
限定符,调用期间就会出现歧义,这可以避免,就像指定基类 B::f()
关于c++ - C++ 中的多重虚拟继承提示特定函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21202884/