多型實現的原理

2021-07-28 14:47:53 字數 421 閱讀 9863

多型實現的原理從兩個方面說明: 1.虛函式表 2.rtti機制

當你在乙個類中使用了virtual關鍵字,那麼就產生了虛函式表,虛函式表中存放的是虛函式的入口位址,父類有父類的虛表,子類有子類的虛表,當繼承時,虛表進行了複製,在子類中重寫了父類的虛函式時,子類虛表中這個函式位址就替換成子類虛函式的位址.在使用父類指標呼叫子類方法時,就會先去查詢子類的虛表,找這個函式的位址,如果找到,直接呼叫子類方法,如果沒有找到,就在普通函式中查詢.

rtti(執行時型別識別),那麼是如何利用typeid()來得到執行時實際型別的資訊那,原來虛函式表位址向低位址偏移4個位元組的位置儲存rtti的資訊,當使用typeid(),傳入指標時,編譯器找到該指標實際指向的記憶體,然後通過vptr指標找到虛函式表,然後在虛函式表首位置向低位址偏移4個位元組的位置上找到該類的資訊返回

這就是多型實現的基本原理.

多型 2 多型的實現原理

當類中宣告虛函式時,編譯器會在類中生成乙個虛函式表 虛函式表是乙個儲存類成員函式指標的資料結構 虛函式表是由編譯器自動生成與維護的 virtual成員函式會被編譯器放入虛函式表中 存在虛函式時,每個物件中都有乙個指向虛函式表的指標 vfptr指標 物件在建立的時,由編譯器對vfptr指標進行初始化 ...

多型的實現原理

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

多型實現原理

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