ここにあるmain()
:
int main()
{
B b(1,"two","three");
try
{
f1(b);
}
catch(B& b_ref)
{
cout<<"Caught B&"<<endl;
b_ref.print();
}
catch(A& a_ref)
{
cout<<"Caught A&"<<endl;
a_ref.print();
}
system("pause");
return 0;
}
ここにあるf1()
:
void f1(A& subject)
{
throw subject;
}
情報:
B は A から継承します。A::print()
仮想であり、B で再実装されます。例外をキャッチする catch は です。これはcatch(A& a_ref)
、例外の静的な型 (サブジェクト) が A& であるため、理にかなっていると思います。しかし、なぜB:: print()
実行されていないのですか?動的タイプは「失われた」ですか?ラインでのみA::print()
実行されますa_ref.print();
。
誰か説明できますか?