10 型別檢查

2021-08-25 05:09:56 字數 816 閱讀 6933

分為兩種:傳統rtti和reflection

傳統rtti: 多型時用到。基類引用子類,呼叫多型方法時進行rtti。

強制型別轉換。 檢查是否能轉,不能轉丟擲異常,(執行時)

獲取class物件的方法: class.forname();   object.class;

stiatic函式,在類首次載入時執行。(按需執行)

new 乙個物件 == c = class.forname(); c.newinstance(); 後者靈活些。

object instanceof 「class name」 == class.isinstance(object);

reflection: 傳統rtti編譯時就要獲取class檔案。reflection在執行時獲取class檔案。

(zz)

rtti與多型到底有什麼區別呢?

查了相關資料以後,稍微明白點,看來還是自己基礎只是不紮實啊。

在多型的運用中,基類定義方法,子類重寫或者過載該方法。在實際程式設計中,往往用基類的引用去代表繼承自該類的所有子類,那麼該引用呼叫的方法必須是基類中 已經定義的。這樣的話,在程式執行的時候,編譯器自動發現是基類還是它的繼承類,從而呼叫相應的方法。(我猜想,編譯器就是通過rtti發現型別資訊 的)。

這樣,使用多型機制的方法呼叫時,必須我們先知道了基類定義了什麼方法,這就要求我們對基類定義的控制權。如果基類是來自乙個庫或者由別人控制,這時候 rtti就是一種解決之道:可以繼承乙個新類,然後新增你要的方法。在**的其他地方,可以檢查你自己特定的型別,並呼叫你自己的方法。

所以說rtti可以說和多型沒有關係,但是我想在多型的實現機制上,肯定用到了rtti。

編譯原理(三)型別檢查

型別系統 型別檢查 多態函式 過載 上面不能在不該出現continue的地方出現continue。c語言 問題 如果a是乙個陣列名,那麼表示式a和 a的值都是陣列a第乙個元素的位址,它們的使用是否有區別?用四個c檔案的編譯報錯或執行結果來提示 上面報錯,返回的a不能作為二位陣列的指標 返回a的指標時...

學習總結10 型別轉換

小記 靜默如初,安之若素 1.隱式型別轉換 eg char c a int i c 隱式轉換 char int void func int i func c intfoo void 2.顯示轉換 2.1 c 相容c的強制型別轉換 eg char c a int i int c c風格 int i i...

C 鹽水的故事 10 型別技巧)

掛鹽水的時候,如果滴起來有規律,先是滴一滴,停一下 然後滴二滴,停一下 再滴三滴,停一下.現在有乙個問題 這瓶鹽水一共有vul毫公升,每一滴是d毫公升,每一滴的速度是一秒 假設最後一滴不到d毫公升,則花費的時間也算一秒 停一下的時間也是一秒這瓶水什麼時候能掛完呢?input 輸入資料報含多個測試例項...