-
實例化公交車類和坦克類,將對象傳入到doSomething函數中,調用相應函數查看全部
-
講的真好查看全部
-
接口類更多的表達一種能力或協議 class Flyable { public: virtual void takeoff() = 0; //起飛 virtual void land() = 0; //降落 };查看全部
-
接口類:僅含有純虛函數的類 無數據成員,只有成員函數,成員函數都是純虛函數查看全部
-
從虛函數表來看純虛函數: 抽象類:含有純虛函數的類 抽象類無法實例化對象 抽象類的子類只有將抽象類中的所有純虛函數都做了實現,才能實例化對象查看全部
-
純虛函數:沒有函數體,并且=0查看全部
-
1、成員函數加上virtual關鍵字,在Shape類實例化對象的時候,就含有一個虛函數表指針,虛函數表 2、定義了虛析構函數,在Shape類實例化對象的時候,就含有一個虛函數表指針,虛函數表 3、由于父類定義了虛析構函數,能夠傳遞到Circle類(子類),在子類實例化對象的時候,產生虛函數表,虛函數表指針。對于子類對象而言,前四個基本內存單元是虛函數表的地址,接下來是數據成員的地址查看全部
-
Shape類沒有成員,C++為了表明對象的存在,用1個內存單元去標記,sizeof(shape) = 1 Circle類有一個int成員,所以sizoof(circle) = 4查看全部
-
(接上面)而在子類中,虛函數表中也會產生一個指向子類析構函數的指針,此時若使用父類指針指向子類對象,那么delete父類指針時,就可以通過父類找到子類的虛函數表指針,然后找到虛函數表,再找到子類的析構函數,執行完畢后,系統會自動執行父類的析構函數查看全部
-
虛析構函數: 理論前提:執行完子類的析構函數就會執行父類的析構函數 如果在父類中定義了虛析構函數,父類的虛函數表當中就會有一個父類析構函數的函數指針查看全部
-
函數的隱藏和覆蓋: 隱藏:父類和子類出現同名函數 覆蓋:子類沒有定義同名虛函數,在子類虛函數表當中就會寫上父類相應虛函數的入口地址;子類定義了同名虛函數,子類虛函數表中就會將父類相應虛函數的入口地址覆蓋成子類虛函數的入口地址查看全部
-
若子類Circle定義了虛函數calcArea(),則實例化Circle對象時,函數指針會發生變化查看全部
-
實例化Circle對象時: 由于Circle類中沒有定義虛函數,從父類中繼承了虛函數,也會產生一個虛函數表(是子類的虛函數表),但函數指針卻是一樣的查看全部
-
假設父類Shape定義了虛函數calcArea(),而子類Circle沒有定義calcArea() 實例化Shape對象時: 虛函數表指針——>虛函數表——>函數指針(函數入口地址)查看全部
-
virtual在函數中的使用限制: 1、普通函數不能是虛函數 2、靜態函數不能是虛函數 3、內聯函數不能是虛函數 4、構造函數不能是虛函數查看全部
舉報
0/150
提交
取消