c 虛函式的實現機制 筆記

2021-05-21 21:05:37 字數 603 閱讀 9656

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 虛函式的實現機制 筆記

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

c 虛函式的實現機制 筆記

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

c 虛函式的實現機制 筆記

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