最贊回答 / qq_閉眼愛幻想_0
<...code...>因?yàn)槟愣x的是Shape類型的指針,Shape類里面的函數(shù)不虛,就被調(diào)用了。Shape中的函數(shù)被定義成虛函數(shù)才能生成虛函數(shù)列表指向子類的虛函數(shù)。
2016-09-12
最新回答 / SkyWalker_1
當(dāng)然,一下只是個(gè)人觀點(diǎn)。本人是小白,接受各位dalao的批判。前提是你用父類對(duì)象去實(shí)例化子類。如果沒有virtual,則不生成虛函數(shù)表指針,則只能找到父類的成員函數(shù)。如果加上virtual后,會(huì)生成,并且可以通過此函數(shù)表找到子類的虛函數(shù)指針,繼而找到子類的虛函數(shù)。
2016-09-10
最新回答 / BE_YOUSELF
這里是會(huì)有隱藏,但是你在父類中的同名成員函數(shù)前加了virtual,會(huì)生成一個(gè)虛函數(shù)表,定義的指針是通過虛函數(shù)表來(lái)只想要調(diào)用的函數(shù)。只理解到這里,見諒!
2016-09-06
最贊回答 / 慕后端7037387
視頻中已經(jīng)實(shí)例化了:(1)Circle *cir=new Circle(3,5,40);Shape *shape1 = cir;(2)Shape *shape1 = new Circle(3,5,4.0);之間的區(qū)別只是子類對(duì)象有沒有子類指針指向;題主(1)應(yīng)該是想說子類對(duì)象有了子類指針指向的話,就可以利用刪除子類指針來(lái)調(diào)用子類析構(gòu)函數(shù)了,所以第二種做法非要再加上virtual虛析構(gòu)函數(shù),就是多此一舉;其實(shí),在使用的時(shí)候,我們用父類指針指向子類對(duì)象,什么時(shí)候結(jié)束使用該指針,如果使用(1),則要delete...
2016-09-05
最新回答 / 海風(fēng)3
計(jì)算機(jī)規(guī)定是這樣執(zhí)行的,定義子類會(huì)自動(dòng)實(shí)例化父類,刪除子類會(huì)把因?yàn)閷?shí)例化子類而實(shí)例化的父類刪除,相反刪除父類不會(huì)刪除子類,如果要?jiǎng)h除需要用虛析構(gòu)函數(shù)
2016-08-05
最新回答 / 慕粉3744161
虛析構(gòu)函數(shù)適用于如下這種情況:如果用new運(yùn)算符開辟了一端空間,如果基類中有析構(gòu)函數(shù),且定義了一個(gè)指向該基類的指針變量。如果在釋放這段內(nèi)存時(shí),只執(zhí)行基類析構(gòu)函數(shù),而不執(zhí)行繼承類析構(gòu)函數(shù),就會(huì)造成內(nèi)存泄漏,所以要采用虛析構(gòu)函數(shù)。
2016-08-05