这里是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();
。
有人可以解释一下吗?