您好,登錄后才能下訂單哦!
開門見山的說,虛函數能夠動態綁定的實現是一個虛表的存在
有如下繼承關系
class A
{
public:
virtual void fun1();
virtual void fun2();
};
class B:public A
{
public:
void fun1();
void fun3();
};
每一有虛函數的類在實例化的時候會形成一個虛表,而在類內保存一個指向虛表的指針,
這個虛表指向了具體函數的實現:
如,在A類中虛表的內存布局
指針指向A類的fun 1() |
指針指向A類的fun2() |
A類對象的內存布局
指向A類虛表的指針 |
A類對象的數據成員 |
B繼承的A因此B也有一個表,不同的是B中的虛表布局一樣,而指向的函數地址不同
那么當父類的指針指向子類的對象的時候,虛表指針指向的虛表會動態的指向子類的表,從而實現了虛函數的動態綁定。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。