请解释为什么以下代码的 O/P 存在差异... 1> 当类 A 和 B 使用虚拟继承时,则调用 B::f 2> 当 A 和 B 没有虚拟继承时然后调用 L::f
如果您对虚拟和非虚拟函数使用虚拟继承/非虚拟继承和指针转换的不同组合,那么很少有 o/p OR 错误肯定会让您感到惊讶。
这就是为什么我正在寻找一些 C++ 编译器始终遵循的通用规则。换句话说,如何在不编译代码或运行代码的情况下预测 o/p OR 错误。
#include <iostream>
using namespace std;
class L{
public :
virtual void f(){
cout<<"L::f()"<<endl;
}
};
class A: public virtual L{
public :
/*
virtual void f(){
cout<<"A::f()"<<endl;
}
*/
};
class B : public virtual L{
public :
virtual void f(){
cout<<"B::f()"<<endl;
}
};
class C : public B, public A {
public :
/*
virtual void f(){
cout<<"C::f()"<<endl;
}
*/
};
int main(){
A* ptr = new C();
ptr->f();
return 0;
}