1.聯編是電腦程式彼此關聯的過程,這個過程需要確定函式呼叫和執行函式呼叫的**之間的對映關係,按照聯編的不同階段,可以分為靜態聯編和動態聯編;
2.靜態聯編:就是在程式執行之間執行的早期聯編,那麼在程式執行時就會按照靜態聯編的結果進行執行,這也就是為什麼一直執行的時父類的func,也就是說如果父類和子類都有同乙個函式的情況下,而且這個函式不是虛函式的話,那麼無論是定義的子類還是父類的變數,去執行該函式的時候都是執行的父類中的函式(原因如下,為自己理解,還需要查證資料證實,因為如果父類和子類中存在同名的非virtual函式的話,那麼該函式在彙編中就會只生成父類中該函式的指標,而不會存在子類中的該函式);
3.動態聯編:
在概念之前需要明確的一點是:只有用指標或者是引用去呼叫虛函式才會執行動態聯編,否則會執行靜態聯編;
當使用虛函式的時候,即使執行了靜態聯編,其實也未確定下該位置需要執行哪個函式,那麼就要求編譯器在執行的時候動態編譯;
當類中存在虛函式的時候,在生成彙編的時候,會為該類生成乙個虛函式列表,將這個虛函式對應的指標放在該類的結構體中,當子類修改該虛函式的時候,子類的虛函式列表指標就會做出相應的修改;
虛函式按照其宣告順序存放於虛函式表中;
父類的虛函式存放在子類虛函式的前面;
多繼承中,每個父類都有自己的虛函式表;
子類的成員函式被存放於第乙個父類的虛函式表中;
4.講完了聯編的知識,其實就不需要再去講什麼虛函式了吧。。。。。
C 學習筆記之虛函式
虛函式即在父類中成員函式錢加上virtual關鍵字,使得該成員函式具有動態鏈結屬性 因此函式具有了多型性 那麼什麼是動態鏈結呢?即程式在編譯階段不能確切知道將要呼叫的函式,只有在程式執行時才能確定將要呼叫的函式,要確切的知道呼叫的函式,要求聯編工作要在程式執行時進行,這種程式執行時進行的聯編稱之為動...
C 學習筆記 虛函式
虛函式主要用於c 中的多型特性,對於類的繼承而言,如果用父類的指標指向子類的的物件,當用該指標操作子類物件時,該指標只能操作父類中的函式,而對於子類中特有的和過載的方法,用該指標將無法使用。案例 class base class derive public base void show 派生類獨有的...
C 學習之 虛函式
靜態聯編 運算子過載 過載函式是通過 名字壓延 方法來實現。即在編譯時將函式名和引數結合起來創造乙個新的函式名,用新的名字替換原有名字。執行時多型性虛函式是在類定義中的函式原型宣告前加乙個關鍵字virtual。在派生類中重新定義時,它的函式原型 包括返回型別,函式名,引數個數和引數型別 必須與基類中...