ここにある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();。
誰か説明できますか?