1.動態類型指的是基類指針所指向的對象的實際類型
2.C++中的多態根據實際的對象類型調用對應的虛函數
(1)可以在基類中定義虛函數返回具體的類型信息
(2)所有的派生類都必須實現類型相關的虛函數
(3)每個類中的類型虛函數都需要不同的實現
3.利用多態進行動態類型識別
4.使用虛函數進行動態類型識別的缺陷
-必須從基類開始提供類型虛函數
-所有的派生類都必須重寫類型虛函數
-每個派生類的類型ID必須唯一
-利用虛函數進行動態類型識別的方法可以滿足工程的需要,但是維護性會隨着派生類的增多而成指數級增加。
5.新的關鍵字dynamic_cast
-dynamic_cast是C++中的新型轉換關鍵字
-dynamic_cast主要用於基類和派生類之間的轉換
-dynamic_cast要求使用的目標對象類型是多態的
即:所在類族至少有一個虛函數
-用於指針轉換時,轉換失敗返回空指針
-用於引用轉換時,轉換失敗將引發bad_cast異常
利用dynamic_cast進行動態類型識別:
dynamic_cast的優勢
-不用顯示的聲明和定義類型虛函數
-不用為類族中的每個類分配類型ID
dynamic_cast的缺陷
只能用於具有虛函數的類族
6.C++提供了typeid關鍵字用於動態獲取類型信息
typeid關鍵字返回對應參數的類型信息
typeid返回一個type_info類對象
當typeid的參數為NULL時,拋出bad_typeid異常
type_info類的使用需要包含<typeinfo>
typeid關鍵字的使用: