五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C/C++編程筆記:重載可以與繼承一起使用嗎?

2021-05-10 20:42 作者:C語言編程__Plus  | 我要投稿



如果我們在基類中有一個函數(shù),而在派生類中有一個同名函數(shù),那么可以從派生類對象中調(diào)用基類函數(shù)嗎?這是一個有趣的問題,作為實(shí)驗(yàn)可以預(yù)測以下C ++程序的輸出。


該程序的輸出為:

f(雙精度):6.3

f(雙精度):6.6

而不是假定的輸出:

f(整數(shù)):6

f(雙精度):6.6

重載不適用于C ++編程語言中的派生類。Base和Derived之間沒有重載分辨率。編譯器查看Derived的范圍,找到單個函數(shù)“ double f(double)”并調(diào)用它。它永遠(yuǎn)不會干擾Base的(封閉)范圍。在C ++中,沒有作用域之間的重載-派生類作用域不是該一般規(guī)則的例外。

現(xiàn)在考慮該程序的Java版本:


上面程序的輸出是:

f(整數(shù)):6

f(雙精度):6.6

因此,在Java中,重載可在與C ++相反的范圍內(nèi)進(jìn)行。Java編譯器根據(jù)用于調(diào)用方法的參數(shù)類型來確定要在編譯時執(zhí)行的重載方法的正確版本,這兩個類的重載方法的參數(shù)都會接收在調(diào)用中使用的參數(shù)的值并執(zhí)行重載方法。

最后,讓我們嘗試以下C#程序的輸出:


注意:Console.ReadKey()用于暫??刂婆_。它類似于C / C ++中的getch。

上面程序的輸出是:

f(雙精度):6.3

f(雙精度):6.6

代替假設(shè)的輸出

f(整數(shù)):6

f(雙精度):6.6

說明:在這里,我們正在創(chuàng)建派生類的對象,因此編譯器將優(yōu)先考慮派生類,并在需要時執(zhí)行隱式類型轉(zhuǎn)換。因此,一旦編譯器到達(dá)Console.WriteLine(obj.f(3));?這行代碼將檢查參數(shù)兼容性。在這里,圖3是INT其與兼容雙的派生類函數(shù)f。因此,編譯器將執(zhí)行int到double的隱式類型轉(zhuǎn)換。因此,輸出f(double):6.3將會出現(xiàn)。

現(xiàn)在,當(dāng)編譯器運(yùn)行在Console.WriteLine(obj.f(3.3));處。,它將再次賦予派生類優(yōu)先級,并發(fā)現(xiàn)可調(diào)用。因此它將評估派生類函數(shù)f。因此,輸出f(double):6.6將會出現(xiàn)。

現(xiàn)在讓我們再來看一次將基類函數(shù)f放入派生類中的情況,反之亦然,如下所示:


輸出:

f(整數(shù)):6

f(雙精度):6.6

您對預(yù)期的輸出感到震驚嗎?這怎么可能?

好吧,我們對這些問題有一個答案。由于我們已經(jīng)創(chuàng)建了Derived類的對象,因此C#編譯器將優(yōu)先考慮derived,如果找不到任何兼容性,則將其用于基類。因此,當(dāng)編譯器位于Console.WriteLine(obj.f(3))時;的代碼行,它將檢查派生的類方法f,并發(fā)現(xiàn)可調(diào)用的,因此執(zhí)行此方法,并輸出f(int):6?,F(xiàn)在當(dāng)Console.WriteLine(obj.f(3.3));?這行代碼將執(zhí)行,將發(fā)現(xiàn)派生的類方法不適合作為3.3(double)

與int數(shù)據(jù)類型不兼容,因此編譯器現(xiàn)在將更喜歡基類,并且在那里找到最佳匹配并執(zhí)行該匹配。因此,該輸出為f(雙精度):6.6。

原因與C ++程序中說明的相同。像C ++一樣,在Base類和Derived類之間沒有重載解析。在C#中,沒有作用域之間的重載,派生類作用域也不是該一般規(guī)則的例外。這與C ++相同,因?yàn)镃#語言的創(chuàng)建者Anders hejlsberg認(rèn)為,C#的設(shè)計(jì)與C ++更加接近。

以上就是今天的全部內(nèi)容了。每日分享小知識,希望對你有幫助~

另外如果你想更好的提升你的編程能力,學(xué)好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~

微信公眾號:C語言編程學(xué)習(xí)基地

分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)

歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!


C/C++編程筆記:重載可以與繼承一起使用嗎?的評論 (共 條)

分享到微博請遵守國家法律
五寨县| 东港市| 宁远县| 泸定县| 广丰县| 松滋市| 中阳县| 宁陕县| 张家港市| 泗洪县| 潮安县| 五河县| 湘乡市| 嘉定区| 观塘区| 海林市| 四平市| 车致| 临猗县| 建始县| 吴堡县| 泰州市| 仙桃市| 临城县| 喀喇| 蒙阴县| 夏津县| 瑞安市| 武功县| 房产| 通州市| 周口市| 枣强县| 绩溪县| 清远市| 分宜县| 龙江县| 新乐市| 深泽县| 勐海县| 宣城市|