我如何抛出多态?

时间:2015-10-27 11:18:22

标签: c++ oop exception-handling

class MyExceptionBase {};

    class MyExceptionDerived : public MyExceptionBase { }; 

        void f(MyExceptionBase& e) 
        {
     // ... throw e; 
        }  

        void g()
        { 
           MyExceptionDerived e;
         try{ 
              f(e);
             }
         catch (MyExceptionDerived& e)
         {
          ...code to handle MyExceptionDerived... 
         }
        catch (...)
        {
           ...code to handle other exceptions... 
        } 
    } 

如果你尝试这个,在你输入catch(...)子句的运行时,而不是你的catch(MyExceptionDerived&)子句,发生了什么?

1 个答案:

答案 0 :(得分:0)

throw概念性地抛出异常对象的副本。由于您正在使用函数f(),因此您正在切换MyExceptionBase的副本并将其抛出。

注意:始终std::runtime_errorstd::logic_error派生您的例外基础。