可分為靜態多型和動態多型
過載比較簡單這裡就不說,今天我們主要來談一談虛函式
如何驗證vptr指標存在?
先看如下**,父親類中沒有宣告虛函式,只有乙個int成員,而子類中宣告虛函式,並且擁有乙個int成員
#include using namespace std;
class father
;class child
;int main()
執行結果如下
子類中宣告了虛函式,系統自動生成了乙個vptr指標,其大小4位元組;因此子類總大小為8位元組。
虛表的解釋之前看到一篇文章解釋的比較清楚,文章會圍繞四鐘情況來進行解釋,下面來自該文章的解釋
1、在單繼承沒有覆蓋的情況下,子類的虛表會緊跟父類的虛表(虛函式按照宣告順序放於表中)。
2、在單繼承有覆蓋的情況下,覆蓋的子類會替代原先父類虛表的位置,其餘的子類虛表會緊跟父類
3、在多繼承沒有覆蓋的情況下,子類的虛表會緊跟第乙個父類的虛表,其他的父類虛表中不會出現子類的虛表
4、在多繼承有覆蓋的情況下,覆蓋的子類會替代所有父類同名虛函式在虛表中的位置,其餘的子類虛表會緊跟第乙個父類的虛表
#includeusing namespace std;
class base
virtual void g()
{} virtual void h()
{}};
class base1
virtual void g()
{} virtual void h()
{}};
class base2
virtual void g()
{} virtual void h()
{}};
class derive : public base, public base1, public base2
virtual void g1()
{} virtual void h1()
{}};
void main()
虛表 虛指標
虛函式在c 中的實現機制就是用虛表和虛指標,但是具體是怎樣的呢?從more effecive c 其中一篇文章裡面可以知道 是每個類用了乙個虛表,每個類的物件用了乙個虛指標。具體的用法如下 cpp view plain copy class a class b public a a,b的實現省略 因...
虛函式,虛表,虛表指標
分享一篇文章,詳細解釋了為什麼通過基類指標指向基類物件或派生類物件,就可以呼叫相應類的虛函式。自 一 概述 為了實現c 的多型,c 使用了一種動態繫結的技術。這個技術的核心是虛函式表 下文簡稱虛表 本文介紹虛函式表是如何實現動態繫結的。二 類的虛表 每個包含了虛函式的類都包含乙個虛表。我們知道,當乙...
虛繼承 虛表 虛指標
c 實現多型的方法 其實很多人都知道,虛函式在c 中的實現機制就是用虛表和虛指標,但是具體是怎樣的呢?從more effecive c 其中一篇文章裡面可以知道 是每個類用了乙個虛表,每個類的物件用了乙個虛指標。具體的用法如下 class a class b public a a,b的實現省略 因為...