次のコードの 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;
}