-
typeid用來判斷類型
返回一個type_info對象的引用
如果想通過基類的指針獲得派生類的數(shù)據(jù)類型,基類必須帶有虛函數(shù)
只能獲取對象的實際類型
dynamic_cast轉(zhuǎn)化類型:
只能應(yīng)用于指針和引用的轉(zhuǎn)換
要轉(zhuǎn)換的類型中必須包含虛函數(shù)
轉(zhuǎn)換成功返回子類的地址,失敗返回NULL
查看全部 -
接口類(成員函數(shù)全為純虛函數(shù)的類)無cpp文件
查看全部 -
接口類例子
查看全部 -
僅含有純虛函數(shù)的類為接口類
查看全部 -
抽象類
查看全部 -
純虛函數(shù)
查看全部 -
virtual的限制4
查看全部 -
virtual的限制3
查看全部 -
virtual的限制2
查看全部 -
virtual的限制1
查看全部 -
虛函數(shù)(子類定義時最好也加上virtual關(guān)鍵字)
查看全部 -
多態(tài):指相同對象受到不同消息或不同對象收到相同消息時產(chǎn)生不同的動作。
靜態(tài)多態(tài)(早綁定):在運行前,編譯階段就已確定要調(diào)用哪個函數(shù),很早就把函數(shù)編譯進去。
動態(tài)多態(tài)(晚綁定):不同對象,下達相同指令,產(chǎn)生不同動作。前提:以封裝與繼承為基礎(chǔ)。至少要兩個類,父類與子類,用三個類時,動態(tài)多態(tài)表現(xiàn)地會更明顯。
實現(xiàn)多態(tài)的成員函數(shù):用virtual修飾函數(shù),使之成為虛函數(shù)查看全部 -
typeid,typeid.name
dynamic_cast
查看全部 -
將obj這個指向轉(zhuǎn)換為Plane的指針或者是Bird的指針
typeid(*obj).name() 打印的是某個類型
typeid能打印的指針,是指針本身的類型
dynamic_cast轉(zhuǎn)換必須是指針或者是引用,而且要轉(zhuǎn)換的類型中必須含有虛函數(shù)查看全部 -
接口類Flyable,沒有cpp文件,因為根本不需要去實現(xiàn)。 并且沒有構(gòu)造函數(shù)和析構(gòu)函數(shù),只有2個純虛函數(shù)。
構(gòu)造函數(shù)是用來實例化(或者叫構(gòu)造對象)用的, 而接口是不允許進行實例化的, 因此沒有構(gòu)造函數(shù)接口類只含有純虛函數(shù)。
接口類不能被實例化,但可以有指向接口類的指針,以便于操縱各個子類。
查看全部 -
純虛函數(shù) = 抽象函數(shù)
含有純虛函數(shù)的類 = 抽象類
查看全部 -
1、普通函數(shù)(全局函數(shù))不能是虛函數(shù)
2、靜態(tài)成員函數(shù)不能是虛函數(shù)
3、內(nèi)聯(lián)函數(shù)不能是虛函數(shù)
4、構(gòu)造函數(shù)不能是虛函數(shù)
查看全部 -
靜態(tài)多態(tài):通過傳入?yún)?shù)的不同調(diào)用不同的函數(shù)(函數(shù)重載)
動態(tài)多態(tài):通過父類指針指向不同子類對象,令不同的子類對象調(diào)用各自子類重寫的函數(shù)。
為什么需要虛函數(shù)/抽象函數(shù)?
因為動態(tài)多態(tài),是通過父類指針指向不同子類對象實現(xiàn)的。而用指針調(diào)用同名函數(shù)時,默認(rèn)調(diào)用的是父類的函數(shù)。
所以需要將父類函數(shù)寫成虛函數(shù),讓PC知道需要調(diào)用的是所指向子類的函數(shù)。
查看全部 -
不同的對象,接收同一參數(shù)。
執(zhí)行情況和輸出結(jié)果不同,就稱為“多態(tài)”
查看全部 -
1、異常處理關(guān)鍵字try...catch...和throw就是將主邏輯放在try塊里,異常處理邏輯放在catch里面。 基本思想:主邏輯與異常處理分離。好處看上去整齊,非常容易理解。
2、try與catch可以是一對多的關(guān)系,第三種方式catch(...)是指throw拋出異常后,catch都能捕獲到異常的寫法;
3、異常處理與多態(tài)的關(guān)系:例子中catch中為父類引用對象,可以捕獲兩種拋出異常,并通過子類對象調(diào)用相應(yīng)函數(shù);
查看全部
舉報