C++運行時類型識別——RTTI


RTTI

通過運行時類型識別——RTTI,程序能夠使用基類的指針或引用來檢索這些指針或引用所指對象的實際派生類類型:

其主要通過兩個操作符來實現:

1.typeid——返回指針或引用所指對象的實際類型;

2.dynamic_cast——將基類類型的指針或引用安全地轉換為派生類型的指針或引用;


dynamic_cast


當無法為基類增加虛函數,又要使用基類的指針或引用調用派生類的函數時,可以使用該操作符代替虛函數。

與dynamic_cast一起使用的指針必須是有效的——它必須為0或者指向一個對象。

與其他強制類型轉換不同,dynamic_cast涉及運行時類型檢查,,它一次執行兩個操作:1.它首先驗證被請求的轉換是否有效,即綁定到引用或者指針的對象必須為目標類型的對象(或其派生的對象),若不是,則綁定失敗,當綁定失敗時,如果轉換到的是指針類型,則返回的結果是0,如果轉換到的是引用類型,則拋出一個bad_cast類型的異常。該異常在typeinfo頭文件中定義;2.只有驗證轉換有效時,才實際進行轉化,且轉換實在運行階段而不是編譯階段;


typeid


typeid操作符能夠問一個表達式得出其類型。

其表達形式如:typeid(e)

e可以是仍以表達式或者類型名,如果是類類型且該類包含一個或多個函數,則表達式的動態類型可能不同於其靜態類型,該操作符會在運行時計算其類型,如果是表達式(內置類型或常量),則該操作符將指出e的靜態類型。

typeid操作符的結果是名為type_info的標注庫類型的對象引用,它包含在頭文件typeinfo中。







注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com