Вот 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(A& a_ref)
, что, я думаю, имеет смысл, поскольку статический тип (субъект) исключений - A &. НО, почему не работает B:: print()
? Динамический тип "потерян"? Только A::print()
работает в строке a_ref.print();
.
Может кто-нибудь объяснить?