- struct B
- {
- virtual void say(){cout<<"this is "<<typeid(*this).name()<<endl;}
- };
- struct D:public B
- {
- };
- int main()
- {
- try{
- D d;
- B& rb = d;
- rb.say(); //this is D1
- throw rb; //這裡抛出的是rb的拷貝,類型位B
- }catch(B& b)
- {
- b.say(); //this is B1
- }
- }
- catch (Widget& w) // 捕獲Widget異常
- {
- ... // 處理異常
- throw; // 重新抛出異常,讓它
- } // 繼續傳遞
- catch (Widget& w) // 捕獲Widget異常
- {
- ... // 處理異常
- throw w; // 傳遞被捕獲異常的
- } // 拷貝