丟擲異常與傳引數及呼叫虛函式之間的區別與聯絡

2021-08-04 14:20:33 字數 521 閱讀 6413

先來談談丟擲異常與傳參:

聯絡:都有三種傳遞方式:值傳遞、引用、指標

區別:1.傳遞引數,最終控制權會回到呼叫處。而丟擲異常,則不會回到拋出處。

2.傳遞引數所允許的隱式型別轉換比丟擲異常要多。

異常只允許兩種隱式型別轉換:<1>:將基類轉換成派生類物件,即可用捕捉派生類異常。

<2>:將「有型指標」轉換成「無形指標」。即catch(const void*..);可以捕捉任何指標型別的異常。

3.丟擲異常必然伴隨著複製物件,如果是值傳遞則會複製兩次。而傳參則不一定。

4.丟擲異常比傳參速度慢。

丟擲異常與呼叫虛函式:

區別:1.當呼叫虛函式時,呼叫的函式是某個物件的動態型別。即基類指標指向派生類物件,呼叫的是派生類的函式。靜態物件是基類,動態型別是派生類。

2.呼叫虛函式時,採用的是最佳匹配,而丟擲異常則是最快匹配。

當你寫catch函式時,(假設你在派生類重新定義了異常處理函式。)

要將派生類寫在前面,基類寫後面,不然不會呼叫派生類的catch。

C 函式成員與虛函式呼叫之間的區別

1 需要分清楚一點,成員函式和virtual函式的呼叫方法是不一樣的 2 成員函式的呼叫是通過this將物件的值傳遞給函式,這裡被傳輸的是物件資料,接收資料的函式是根據物件的型別以及函式名來確定的而virtual則是根據虛函式表來確定的,物件呼叫函式,如果系統發現是虛函式,那麼就會去虛函式表找該函式...

虛函式與多型性 純虛函式的區別聯

用virtual關鍵字宣告的函式叫做虛函式。include class animal void sleep virtual void breathe class fish public animal void fn animal pan void main 上面 在派生類中重新定義了基類中的 vir...

構造與析構的順序問題與C 中虛函式之間的聯絡

基類的成員物件的建構函式 基類的建構函式 子類的成員物件的建構函式 子類的建構函式 子類的成員物件的析構函式 子類的析構函式 基類的成員物件的析構函式 基類的析構函式 由上可推測,在c 中呼叫基類指標建立子類物件時,由於析構函式會優先呼叫基類指標所指的基類析構函式,但是記憶體中建立的是子類物件,因此...