c 實現多型的方法

2021-06-18 21:51:28 字數 600 閱讀 4726

1、c++實現多型的方法

其實很多人都知道,虛函式在c++中的實現機制就是用虛表和虛指標,但是具體是怎樣的呢?從more effecive c++其中一篇文章裡面可以知道:是每個類用了乙個虛表,每個類的物件用了乙個虛指標。具體的用法如下:

class a

;class b : public a

;//a,b的實現省略

因為a有virtual void f(),和g(),所以編譯器為a類準備了乙個虛表vtablea,內容如下:

a::f 的位址

a::g 的位址

b因為繼承了a,所以編譯器也為b準備了乙個虛表vtableb,內容如下:

a::f 的位址

b::g 的位址

注意:因為b::g是重寫了的,所以b的虛表的g放的是b::g的入口位址,但是f是從上面的a繼承下來的,所以f的位址是a::f的入口位址。

然後某處有語句 b bb;的時候,編譯器分配空間時,除了a的int a,b的成員int b;以外,還分配了乙個虛指標vptr,指向b的虛表vtableb,bb的布局如下:

vptr : 指向b的虛表vtableb

int a: 繼承a的成員

int b: b成員

C 中實現多型的方法

c 實現多型的方法 在c 中,我們常說的多型有編譯時多型與執行時多型兩種。編譯時多型是指由編譯器在編譯的過程中,尋找與之合適的函式,類模板等來生成相關的 而執行是多型我們也常稱之為動態繫結 dynamic binding 這是在執行中由不同的物件來指定的。而這種動態繫結是c 提供的最有用的多型手段。...

c 實現多型的方法 虛表

1 c 實現多型的方法 其實很多人都知道,虛函式在c 中的實現機制就是用虛表和虛指標,但是具體是怎樣的呢?從more effecive c 其中一篇文章裡面可以知道 是每個類用了乙個虛表,每個類的物件用了乙個虛指標。具體的用法如下 class a class b public a a,b的實現省略 ...

C 多型的實現方法以及原理

產生多型必備條件發生繼承 繼承物件導向程式設計的全新概念,意思是父類有的public或者protected是的方法或者資料成員,子類public或者protected繼承後可以直接訪問或者使用,private的方法資料成員也會被繼承不過不能直接使用,也就是說子類就包含了父類所有的方法和資料成員,那麼...