以下のコードの場合、結果は「EA Exception Finished」です。これは、派生クラスでスローしたにもかかわらず、基本クラスによってキャッチされたことを意味します。いつもですか?もしそうなら、どうすれば派生クラスをキャッチさせることができるので、「EB Exception Finished」が表示されますか?
throw EB()
また、とが何を意味するのか正確にはわかりませんcatch(EA&)
。そしてcatch(EA&)
、catch ブロックが EAオブジェクトの参照を取得することを意味しますか?
無知で申し訳ありません。例外構造について参考になる本などを教えていただければ、大変助かります。
class EA {};
class EB: public EA {};
void F()
{
throw EB(); // throw at EB().
}
int main()
{
try
{
F();
}
catch(EA&) // caught here??
{
std::cout<<"EA Exception";
}
catch(EB&) // why not me? every time?
{
std::cout<<"EB Exception";
}
std::cout<<" Finished"<<std::endl;
return 0;
}