Inheritance 具有指针转换和虚拟继承的多重继承
请解释为什么以下代码的O/p之间存在差异。。。 1> 当虚拟继承用于类A和B时,则调用B::f 2> 如果A和B没有虚拟继承,则调用L::f 如果您对虚拟函数和非虚拟函数使用虚拟继承/非虚拟继承和指针转换的不同组合,那么很少有o/p或错误会让您感到惊讶 这就是为什么我在寻找一些C++编译器总是遵循的通用规则。换句话说,我如何在不编译或运行代码的情况下预测o/p或错误Inheritance 具有指针转换和虚拟继承的多重继承,inheritance,Inheritance,请解释为什么以下代码的O/p之间存在差异。。。 1> 当虚拟继承用于类A和B时,则调用B::f 2> 如果A和B没有虚拟继承,则调用L::f 如果您对虚拟函数和非虚拟函数使用虚拟继承/非虚拟继承和指针转换的不同组合,那么很少有o/p或错误会让您感到惊讶 这就是为什么我在寻找一些C++编译器总是遵循的通用规则。换句话说,我如何在不编译或运行代码的情况下预测o/p或错误 #include <iostream> using namespace std; class L{ publ
#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;
}