C 中的向上型別轉換和向下型別轉換

2021-06-27 13:42:16 字數 824 閱讀 4598

在c++的世界中有這樣兩個概念,向上型別轉換,向下型別轉換,分別描述的是子類向基類,和基類向子類的強制型別轉換。

向上強制型別轉換

切割:覆蓋方法和子類資料丟失的現象生成切割(slice)

[cpp]view plain

copy

class

base  

};  

class

derived:

public

base  

};  

intmain()    

因此,我們得出結論,在向上強制轉換過程中,使用指標和引用不會造成切割,而使用直接賦值會造成切割。

向下強制型別轉換

使用dynamic_cast進行向下強制型別轉換。使用此關鍵字有一下幾個條件

1.必須有虛函式

2.必須開啟編譯器的rtti開關(vc6: progect-> settings -> c/c++ tab ->category[c++ language]-> enable rtti)

3.必須有繼承關係

[cpp]view plain

copy

base *b = 

newderived;  

derived *d = dynamic_cast

(b);  

if(!d)  

else  

本例子中,符合以上條件,轉換成功。否則,會丟擲std::bad_cast異常,轉換返回null

因此,我們可以使用dynamic_cast來判斷兩個類是否存在繼承關係

c 中向上型別轉換和向下型別轉換

在c 的世界中有這樣兩個概念,向上型別轉換,向下型別轉換,分別描述的是子類向基類和基類向子類的強制型別轉換。在向上型別轉換的過程中 使用指標和引用不會造成切割,而使用直接賦值會造成切割。在向下型別轉換的過程中 使用dynamic cast進行向下強制型別轉換。使用此關鍵字有一下幾個條件 必須有虛函式...

C 向上型別轉換和向下型別轉換

有乙個毛病 遇到乙個問題,總想著以後在遇到再解決,導致乙個簡單的餓問題永遠在拖延,什麼也沒弄會。不知怎麼養成這個壞習慣,誓改之。一 向上型別轉換 所謂向上型別轉換,是指取乙個物件的位址,將其作為基類的位址處理,因為繼承樹是以基類為頂點的。此種轉換無需顯式型別轉換,正是利用這一性質從而實現了多型性。二...

向上型別轉換和向下型別轉換

向上轉型 student person new student 1 將乙個父類的引用指向乙個子類物件,成為向上轉型,自動進行型別轉換。2 此時通過父類引用變數呼叫的方法是子類覆蓋或繼承父類的方法,而不是父類的方法 3 此時通過父類引用變數無法呼叫子類特有的方法 向下轉型 student stu st...