多型 2 多型的實現原理

2021-10-16 09:51:42 字數 396 閱讀 8307

當類中宣告虛函式時,編譯器會在類中生成乙個虛函式表; 

虛函式表是乙個儲存類成員函式指標的資料結構; 

虛函式表是由編譯器自動生成與維護的; 

virtual成員函式會被編譯器放入虛函式表中; 

存在虛函式時,每個物件中都有乙個指向虛函式表的指標(vfptr指標)。

物件在建立的時,由編譯器對vfptr指標進行初始化

只有當物件的構造完全結束後vfptr的指向才最終確定

父類物件的vfptr指向父類虛函式表

子類物件的vfptr指向子類虛函式表

多型實現原理

在繼承中構成多型有兩個條件 1 必須通過基類的指標或者引用呼叫虛函式 2 被呼叫的函式必須是虛函式,並且派生類必須對於虛函式進行重寫 這就是我們的多型,但是多型是怎麼實現的呢?class base private intm a int m b class a public base private ...

多型實現的原理

多型實現的原理從兩個方面說明 1.虛函式表 2.rtti機制 當你在乙個類中使用了virtual關鍵字,那麼就產生了虛函式表,虛函式表中存放的是虛函式的入口位址,父類有父類的虛表,子類有子類的虛表,當繼承時,虛表進行了複製,在子類中重寫了父類的虛函式時,子類虛表中這個函式位址就替換成子類虛函式的位址...

多型的實現原理

一 虛表 在c 語言中,每個有虛函式的類或者虛繼承的子類,編譯器都會為它生成乙個虛函式表 簡稱 虛表 表中的每乙個元素都指向乙個虛函式的位址。注意 虛表是從屬於類的 此外,編譯器會為包含虛函式的類加上乙個成員變數,是乙個指向該虛函式表的指標 常被稱為vptr 每乙個由此類別派生出來的類,都有這麼乙個...