-
實例化子類時,也會有虛函數(shù)指針列表,如果仍然使用繼承自父類的方法,則入口函數(shù)地址和父類的相同
如果子類中重新定義了虛函數(shù)的方法,子類的虛函數(shù)表中指向的函數(shù)入口地址是自己定義的而不是父類的,相當于覆蓋了父類的方法
父類指針指向子類對象 ,則通過子類對象的虛函數(shù)指針找到虛函數(shù)表,與父類同樣多的偏移量,找到子類對象的函數(shù)入口
查看全部 -
虛函數(shù)表指針
定義了virtual函數(shù),實例化一個基類對象時,實例對象中存儲了成員變量和虛函數(shù)表指針。
虛函數(shù)指針指向一個虛函數(shù)表,虛函數(shù)表也占一定的空間,通過基類實例化的所有實例都共用一個虛函數(shù)表。
虛函數(shù)表存儲函數(shù)指針,存儲入口函數(shù)地址。
調(diào)用時候,先找到虛函數(shù)指針,再找到虛函數(shù)表,通過相應的偏移找到虛函數(shù)入口地址再找到相應的執(zhí)行函數(shù)
查看全部 -
指針指向?qū)ο?-對象指針指著指向函數(shù)--函數(shù)指針。函數(shù)的本質(zhì):一部分二進制代碼,寫在內(nèi)存中;與變量指針類似,都是由4個基本內(nèi)存單元組成,存儲一個地址;函數(shù)指針指向函數(shù)開頭,順序執(zhí)行完,指針指向函數(shù)結(jié)尾,并通過指令返回值;執(zhí)行某個函數(shù),獲取指針地址,執(zhí)行入口函數(shù),再返回相應的值。
查看全部 -
Vitrual 使用限制4
不能修飾構(gòu)造函數(shù)
會造成編譯錯誤
查看全部 -
virtual使用限制3
不能修飾內(nèi)聯(lián)函數(shù)
造成忽略inline,變成了虛函數(shù)
查看全部 -
Virtual使用限制2
不能修飾靜態(tài)成員函數(shù)
靜態(tài)成員函數(shù)和類同時共存的
查看全部 -
virtual 使用限制1
不能是全局函數(shù),必須是某個類的成員函數(shù)
查看全部 -
借助父類指針銷毀子類對象時,只執(zhí)行父類的析構(gòu)函數(shù),造成內(nèi)存泄漏
查看全部 -
動態(tài)多態(tài)
派生類中多定義了數(shù)據(jù)成員,派生類構(gòu)造函數(shù)中實例化了那個數(shù)據(jù)成員,分配了內(nèi)存空間, 在析構(gòu)函數(shù)中釋放了空間
查看全部 -
頭文件中定義過了類
此文件中定義了類對象的成員方法的具體實現(xiàn)
查看全部 -
定義宏定義,避免重復定義
查看全部 -
靜態(tài)多態(tài)(早綁定):
程序在編譯階段就確定了調(diào)用哪個函數(shù)執(zhí)行
動態(tài)多態(tài)(晚綁定):
如果不定義virtual 調(diào)用的都是父類的方法
可在父類實現(xiàn)多態(tài)函數(shù)的成員函數(shù)前添加修飾詞virtual, 使其成為虛函數(shù),子類成員函數(shù)也可加上virtual,但不是必要的。
查看全部 -
什么是多態(tài)
查看全部 -
面向?qū)ο笕筇卣?/p>
查看全部 -
重載 1 相同范圍 2 函數(shù)名相同 3 參數(shù)不同 4 virtual可有可無 覆蓋 1 父類子類 2 函數(shù)名相同 3 參數(shù)相同 4 基類必須有virtual關(guān)鍵字 隱藏 1 父類子類 2 無virtual 3 函數(shù)名相同 4 參數(shù)可同可不同查看全部
舉報