關於繼承中的強制型別轉換

2022-06-21 06:24:08 字數 1516 閱讀 8675

dynamic_cast是與繼承相關的型別轉換關鍵字

dynamic_cast要求相關的類中必須有虛函式

用於直接或者間接繼承關係的指標(引用)之間

-指標:

轉換成功:得到目標型別的指標

轉換失敗:得到乙個空指標

-引用:

轉換成功:得到目標型別的引用

轉換失敗:得到乙個異常操作資訊

編譯器會檢查dynamic_cast的使用是否正確

型別轉換的結果只可能在執行階段才能得到

進一步改進:使用dynamic_cast關鍵字

為什麼使用了dynamic_cast關鍵字後,編譯還會出錯?再看一下上邊的規則,是因為類中沒有虛函式。這個地方我們還需要去定義乙個虛函式嗎?完全沒有必要,根據工程經驗,但凡乙個類被定義為父類,虛構函式就定義為虛函式。

假設此時p就指向乙個父類物件,即

小結:new/delete會觸發建構函式或者析構函式的呼叫

建構函式不能成為虛函式

析構函式可以成為虛函式(可以避免記憶體洩露,還有乙個好處使用dynamic_cast)

建構函式和析構函式中都無法產生多型行為

dynamic_cast是與繼承相關的專用轉換關鍵字

關於強制型別轉換

var dump 0 null false var dump 0 0 true var dump 0 false var dump 0 false true var dump 0 null true var dump 0 0 true var dump 0 true var dump 0 false...

關於強制型別轉換

思考 includeint main int ptr1 int a 1 int ptr2 int int a 1 printf x,x n ptr1 1 ptr2 return 0 輸出 4,2000000 我們先看第乙個我們知道ptr1 n ptr1 n 所以ptr1 1 實際上就說ptr所指的前...

matlab中強制型別轉換 型別轉換

上一期提到 隱式型別強制轉換 implicit type coercion 隱式型別強制轉換會造成意外。為了避免出現意外,c 提供了明式型別轉換,允許程式設計師通過使用型別轉換操作 cast operator 主動轉換資料的型別。型別轉換操作也可直接稱為型別轉換 type conversion ty...