溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

虛函數(shù)的實(shí)現(xiàn)機(jī)制

發(fā)布時(shí)間:2020-07-08 07:50:26 來(lái)源:網(wǎng)絡(luò) 閱讀:449 作者:非等閑之輩 欄目:編程語(yǔ)言

開門見山的說(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)綁定。


向AI問一下細(xì)節(jié)

免責(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)容。

AI