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