多型和動態聯編

2021-06-21 20:28:58 字數 384 閱讀 2373

同一**可以產生不同效果的特點,被稱為「多型」

編譯器針對虛函式產生了可以在執行時刻確定被呼叫函式的**

如何「動態聯編」

編譯器是如何針對虛函式產生可以再執行時刻確定被呼叫函式的**呢?也就是說,虛函式實際上是如何被編譯器處理的呢?lippman在深度探索c++物件模型[1]中的不同章節講到了幾種方式,這裡把「標準的」方式簡單介紹一下。

void bar(a * a)

會被改寫為:

void bar(a * a)

因為派生類和基類的foo()函式具有相同的vtable索引,而他們的vptr又指向不同的vtable,因此通過這樣的方法可以在執行時刻決定呼叫哪個foo()函式。

雖然實際情況遠非這麼簡單,但是基本原理大致如此。

多型,覆蓋,過載,靜態聯編,動態聯編。

c 多型有兩種形式,動態多型和靜態多型。動態多型是指一般的多型,是通過類繼承和虛函式機制實現的多型 靜態多型是通過模板方法來實現,因為這種多型是在編譯時而非執行時,所以稱為靜態多型。動態多型例子 class cshape virtual cshape virtual void draw 0 clas...

靜態聯編和動態聯編

聯編是指乙個電腦程式自身彼此關聯 使乙個 源程式經過編譯 連線,成為乙個可執行程式 的過程,在這個聯編過程中,需要確定程式中的操作呼叫 函式呼叫 與執行該操作 函式 的 段之間的對映關係,按照聯編所進行的階段不同,可分為靜態聯編和動態聯編。靜態聯編 呼叫函式和被調函式在程式編譯時,他們在記憶體中的位...

靜態聯編和動態聯編

聯編就是將模組或者函式合併在一起生成可執行 的處理過程,同時對每個模組或者函式呼叫分配記憶體位址,並且對外部訪問也分配正確的記憶體位址,它是電腦程式彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法 靜態聯編和動態聯編。靜態聯編是指在編譯階段就將函式實現和函式呼叫關聯起來,因此靜態聯...