以下のコードでは、結果は "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;
}
例外は、* catch * catchブロックによって常に捕捉されるので、あなたの注文は間違っています。 –
お返事ありがとうございました!!! –