RTTI 執行階段型別識別

2022-07-29 11:15:06 字數 738 閱讀 2180

rtti是執行階段型別識別

c++有3個支援rtti的元素

dynamic_cast

如可能,使用乙個指向基類的指標生成派生類指標,否則返回空指標

typeid

返回乙個指出物件型別的值

type_info

結構儲存了有關特定型別的資訊

* 只能將rtti用於包含虛函式的類層次結構

dynamic_cast(pg);     //pg是否能夠安全的轉換為super * 如果可以,返回pg物件的位址,否則返回空指標

# 將其用於引用時,因為沒有與空指標對應的引用值,因此無法使用特殊的引用值指示失敗,當請求不正確時,將引發 bad_cast 異常(從exception類派生,位於標頭檔案typeinfo中)

typeid運算子和type_info類

typeid運算子能確定兩個物件是否為同種型別,

接受 類名 和 結果為物件的表示式   兩種型別

返回乙個type_info 物件的引用

type_info 在標頭檔案typeinfo 中,過載了== 和 != 運算子,以便比較

typeid(super) == typeid(*pg) //如果pg指向super物件,值為true,否則為false

如果pg 是空指標,引發 bad_typeid 異常(從exception類派生,位於標頭檔案typeinfo中)

type_info 包含乙個name() 成員,該函式返回乙個隨實現而異的字串,通常是類名

RTTI 執行階段型別識別

rtti是執行階段型別識別 c 有3個支援rtti的元素 dynamic cast 如可能,使用乙個指向基類的指標生成派生類指標,否則返回空指標 typeid 返回乙個指出物件型別的值 type info 結構儲存了有關特定型別的資訊 只能將rtti用於包含虛函式的類層次結構 dynamic cas...

RTTI 執行階段型別識別及型別轉換

dynamic cast type name expression 能夠在類層次結構中進行向上轉換 由於is a關係,這樣的型別轉換是安全的 而不允許其他轉換。主要用途是確保可以安全地呼叫虛函式。假設有下述三個類 class grand class superb pubic grand class ...

執行時型別識別(RTTI)

執行時型別識別 rtti 即是程式執行過程中知道某個物件屬於某個類,我們平時用c 程式設計接觸的rtti一般是編譯器的rtti,即是在新版本的vc 編譯器裡面選用 使能rtti 然後載入typeinfo.h檔案,就可以使用乙個叫typeid 的運運算元,它的地位與在c 程式設計中的sizeof 運運...