第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

關(guān)于虛函數(shù)我自己的一點(diǎn)理論理解,不知道對(duì)不對(duì)?大家討論一下,看我的理解有沒有偏差

當(dāng)類中沒有虛函數(shù)的時(shí)候:

? ? ? ?我們通過類的對(duì)象訪問其數(shù)據(jù)成員,訪問其成員函數(shù);前面已經(jīng)知道,實(shí)例化對(duì)象時(shí),只有數(shù)據(jù)成員的大小,這說明類的成員函數(shù)是統(tǒng)一放在內(nèi)存代碼區(qū)的,并且有自己的類名稱空間作為限制,只能自己實(shí)例化的對(duì)象訪問;所以我們通過對(duì)象訪問數(shù)據(jù)成員,是直接在對(duì)象的內(nèi)存塊中偏移得到;而通過對(duì)象訪問成員函數(shù),則是要到代碼區(qū)才能訪問到;

當(dāng)父類與子類之間有重名函數(shù)時(shí):

(1)通過子類對(duì)象訪問父類該重名函數(shù)(于是有了隱藏):

? ? ? ? 父類與子類有重名函數(shù)時(shí),這時(shí)出現(xiàn)了隱藏,即子類是繼承了父類的該重名函數(shù)的,但是將其隱藏了。通過子類對(duì)象訪問該函數(shù)時(shí),訪問的是子類自己的該函數(shù),如果想要訪問父類的該函數(shù),則要在函數(shù)前面加上父類的名稱空間限定;代碼示例如下:父類Person和子類Worker,都有一個(gè)同名函數(shù)name();通過子類對(duì)象worker調(diào)用父類該函數(shù)時(shí),worker.Person::name();

(2)通過父類指針指向子類對(duì)象,并訪問子類重名函數(shù)(于是有了虛函數(shù)):

? ? ? ? 父類指針指向子類對(duì)象時(shí),父類指針只能訪問子類對(duì)象的數(shù)據(jù)成員(部分,繼承自父類的),和訪問父類在代碼區(qū)的自己的成員函數(shù);此時(shí),如果想要通過父類指針訪問到子類對(duì)象的成員函數(shù)(即通過父類指針調(diào)用子類的析構(gòu)函數(shù)或者普通重名函數(shù)),就要將該重名函數(shù)設(shè)定為虛函數(shù),然后將虛函數(shù)地址放進(jìn)該類的虛函數(shù)表中(于是有了覆蓋,即在子類虛函數(shù)表中用子類虛函數(shù)地址覆蓋掉父類虛函數(shù)地址),而對(duì)象又多了個(gè)數(shù)據(jù)成員(虛函數(shù)表指針),且在對(duì)象內(nèi)存塊首位;這樣當(dāng)我們用父類指針指向子類對(duì)象,且調(diào)用子類重名虛函數(shù)時(shí),就要先在虛函數(shù)表中查找,如果找到,就執(zhí)行;即調(diào)用成員函數(shù)時(shí),有虛函數(shù)表先在虛函數(shù)表中查找,然后再在代碼區(qū)查找;

? ? ? ? 這里我只解釋了父類指針訪問子類重名函數(shù)的情況,沒有解釋虛析構(gòu)函數(shù)不重名也能訪問的情況。我想可能是析構(gòu)函數(shù)有自己特殊的用法吧,可能每個(gè)類的析構(gòu)函數(shù)都是同一個(gè)名字,而在代碼中名字是不同的吧。這里如果有同學(xué)想明白了,希望能不吝賜教;

(3)通過子類對(duì)象初始化父類對(duì)象,通過父類對(duì)象不能訪問子類重名函數(shù)(虛):

? ? ? ? 按照上面的理論,子類對(duì)象初始化父類對(duì)象后,子類對(duì)象的數(shù)據(jù)成員會(huì)覆蓋掉父類對(duì)象的數(shù)據(jù)成員,但是這里,父類原有的虛函數(shù)表是沒有被覆蓋掉的,父類對(duì)象的虛函數(shù)表指針還是自己的表指針;表指針里的虛函數(shù)地址還是父類自己的虛函數(shù)地址,所以此時(shí)通過父類對(duì)象只能訪問到子類對(duì)象的數(shù)據(jù)成員(繼承自父類的),訪問自己代碼區(qū)的成員函數(shù)和虛函數(shù)列表中的自己的虛函數(shù),不能訪問到子類虛函數(shù)列表中的虛函數(shù);


正在回答

5 回答

是的,就是這樣滴。


0 回復(fù) 有任何疑惑可以回復(fù)我~

在我們還沒有學(xué)習(xí)多態(tài)的時(shí)候,父類和子類出現(xiàn)了同名函數(shù),這個(gè)時(shí)候就稱之為函數(shù)的隱藏(因?yàn)闆]有虛函數(shù)?)

如果我們沒有在子類當(dāng)中定義同名的虛函數(shù),那么在子類虛函數(shù)表中就會(huì)寫上父類的虛函數(shù)的函數(shù)入口地址;如果我們?cè)谧宇惍?dāng)中也定義了虛函數(shù),那么在子類的虛函數(shù)表中我們就會(huì)把原來的父類的虛函數(shù)的函數(shù)地址覆蓋一下,覆蓋成子類的虛函數(shù)的函數(shù)地址,這種情況就稱之為函數(shù)的覆蓋。

果然速度慢下來一字一字的把老師的話敲下來還是理解深刻一些。

0 回復(fù) 有任何疑惑可以回復(fù)我~

哇靠, 大佬啊, 感覺好細(xì)致

0 回復(fù) 有任何疑惑可以回復(fù)我~

我覺得不要想太多會(huì)應(yīng)用就好:

VIRTUAL只需要加在父類里邊(析構(gòu)函數(shù)和同名成員函數(shù))就好,析構(gòu)函數(shù)前邊加是為了防止沒有釋放子類對(duì)象的內(nèi)存導(dǎo)致內(nèi)存泄露,同名成員函數(shù)前加是為了父類實(shí)例化的對(duì)象指針能夠指向子類數(shù)據(jù)成員。(這樣基本包含了所有的點(diǎn)了)

1 回復(fù) 有任何疑惑可以回復(fù)我~

理解的挺好

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
C++遠(yuǎn)征之多態(tài)篇
  • 參與學(xué)習(xí)       66225    人
  • 解答問題       329    個(gè)

本教程將帶領(lǐng)大家體會(huì)面向?qū)ο笕筇匦灾械亩鄳B(tài)特性

進(jìn)入課程

關(guān)于虛函數(shù)我自己的一點(diǎn)理論理解,不知道對(duì)不對(duì)?大家討論一下,看我的理解有沒有偏差

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)