C 使用引用捕獲異常

2021-08-22 08:46:32 字數 1462 閱讀 5482

#include

using namespace std;

class base

base

(const base& rb)

virtual void

print()

};class derived :public base

derived

(const derived& rd)

:base

(rd)

virtual void

print()

};void

throwfunc()

intmain()

catch (base b)

catch (derived d)

cout <<

"---------------"

<< endl;

try

catch (base& b)

catch (derived& d)

}

程式執行結果:

base's constructor

derived's constructor

base's copy constructor

derived's copy constructor

base's copy constructor

base catched

base

---------------

base's constructor

derived's constructor

base's copy constructor

derived's copy constructor

base catched

derived

閱讀以上程式,注意以下幾點:

(1)程式中在函式throwfunc()中構造物件d,先後分別呼叫基類base和派生類derived的建構函式完成物件d的初始化,分別輸出base』s constructor與derived』s constructor;

(2)c++標準要求被作為異常丟擲的物件必須被拷貝複製,導致異常物件d在離開作用域時,觸發一次臨時物件的拷貝構造,程式輸出從結果來看,先後呼叫了基類base的拷貝建構函式和派生類derived的拷貝建構函式,分別輸出base』s copy constructor與derived』s copy constructor;

(3)按引用捕獲異常比按值捕獲異常更加高效。分隔線以上按值捕獲異常,導致物件d在傳遞時再次被拷貝一次,輸出base』s copy constructor,降低了系統效率,使用引用捕獲異常可以避免額外的拷貝操作;

(4)使用引用捕獲異常,可以通過基類物件實現虛函式的虛呼叫,在執行時提現多型性。

基於效率和多型性的考慮,建議使用引用來捕獲異常。

[1] 陳剛.c++高階高階教程[m].武漢:武漢大學出版社,2008.10.5用傳引用的方式捕獲異常

C 異常捕獲使用

一.異常 c語言 一般使用函式的返回值來表示是否出錯.c 語言 使用異常機制進行處理 異常語法 1 異常捕獲 trycatch 異常型別 名字 catch 異常型別2 名字2 可以有多個catch 分支 2 異常丟擲 throw 異常物件 異常型別 異常捕獲 void config void 注意 ...

c 異常捕獲

概念 c 異常 就是 try catch seh異常 就是 try except 1 0 1 關於這兩種異常,如有不了解的地方,網上有很多資料可以參考 目前微軟所有的vc編譯器 從vc6到vc2010 都預設是開啟對c 異常的編譯支援的 位於專案選項中的 生成 啟用c 異常 ehsc,vc6是ena...

C 異常捕獲

本文章純屬是為了加深記憶,便於學習。若對c 的理解有錯誤,望指出,謝謝。異常捕獲通常發生在輸入不規範。當想要接收整數型別的資料時,控制台卻輸入了其他型別資料,例如字串型別。導致出現異常。try catch 執行過程 如果try中的 沒有出現異常,那麼catch中的 不會執行。如果try中的 出現了異...