非虛函式的繫結

2021-06-26 23:44:46 字數 472 閱讀 6969

非虛函式不會占用子類或者是物件中的記憶體,它的繫結由編譯器來完成。

如果是該函式和呼叫它的程式同步編譯,則在compile-time 繫結;

如果該函式是在動態庫裡面的,則在load-time繫結;

如果該函式是在靜態庫裡面的,則在link-time繫結。

靜態鏈結庫是.lib格式的檔案,一般在工程的設定介面加入工程中,程式編譯時會把lib檔案的**加入你的程式中因此會增加**大小,你的程式一執行lib**強制被裝入你程式的執行空間,不能手動移除lib**。動態鏈結庫是程式執行時動態裝入記憶體的模組,格式*.dll,在程式執行時可以隨意載入和移除,節省記憶體空間。

在大型的軟體專案中一般要實現很多功能,如果把所有單獨的功能寫成乙個個lib檔案的話,程式執行的時候要占用很大的記憶體空間,導致執行緩慢;但是如果將功能寫成dll檔案,就可以在用到該功能的時候呼叫功能對應的dll檔案,不用這個功能時將dll檔案移除記憶體,這樣可以節省記憶體空間。

繼承中的非虛成員函式

都是在公共繼承的前提下。類成員函式包括常用的兩種。非虛函式和虛函式。非虛函式是靜態繫結,虛函式是動態繫結。繼承中的非虛函式 一般不用,都是在迷糊中錯用 這種情況下,呼叫哪個函式與指標型別有關,如果指標型別是子類型別,則呼叫子類的函式,如果是父類的型別呼叫父類的函式 1,類d會不會自己複製乙個和類a一...

繼承中的虛函式與非虛函式

在看公司 時,發現了一處關於虛函式的我比較難以理解的地方,大致描述如下 子類繼承父類,包括繼承了虛函式和非虛函式 子類呼叫父類中的非虛函式base printword 在這個非虛函式裡它又呼叫了虛函式doprintword 實驗表明呼叫的虛函式執行的是重寫的子類虛函式。include using n...

重新定義繼承而來的非虛函式

在一次應聘過程中,負責技術的招聘人員提出了乙個實際開發中遇到的問題 class base class derive public base 結果編譯卻發現錯誤。他想知道是怎麼回事。當時怎麼看怎麼像函式過載 公有繼承嘛 似乎沒什麼問題呀,只好說不知道。後來終於在 effective c 2nd 中找到...