• <em id="6vhwh"><rt id="6vhwh"></rt></em>

    <style id="6vhwh"></style>

    <style id="6vhwh"></style>
    1. <style id="6vhwh"></style>
        <sub id="6vhwh"><p id="6vhwh"></p></sub>
        <p id="6vhwh"></p>
          1. 国产亚洲欧洲av综合一区二区三区 ,色爱综合另类图片av,亚洲av免费成人在线,久久热在线视频精品视频,成在人线av无码免费,国产精品一区二区久久毛片,亚洲精品成人片在线观看精品字幕 ,久久亚洲精品成人av秋霞

            虛函數(shù)與重載函數(shù)的關(guān)系

            更新時(shí)間:2023-12-11 08:26:28 閱讀: 評(píng)論:0

            2023年12月11日發(fā)(作者:滿懷信心)

            -

            虛函數(shù)與重載函數(shù)的關(guān)系

            虛函數(shù)與重載函數(shù)的關(guān)系

            在 C++ 中,一種方法或者說(shuō)技術(shù)學(xué)得越多,就越難理解,同時(shí)也有許多術(shù)語(yǔ)是很相似或者重疊的。在這些術(shù)語(yǔ)中,虛函數(shù)和重載函數(shù)也是常常讓許多程序員感到困惑的兩個(gè)概念。本文將從兩者的定義、應(yīng)用、使用的區(qū)別等方面詳細(xì)探討它們之間的關(guān)系。

            一、虛函數(shù)的定義和應(yīng)用

            虛函數(shù)是在一個(gè)基類中定義的函數(shù),它被聲明為虛擬的,這意味著該函數(shù)的行為可以在一個(gè)派生類中通過(guò)重定義發(fā)生改變。當(dāng)您在派生類中重新定義虛函數(shù)時(shí),Compiler 會(huì)注意到您的賦值,自動(dòng)進(jìn)行 V-table 查找和調(diào)用相應(yīng)的函數(shù)。請(qǐng)注意,這并不一定反映了您所看到的所有的調(diào)用的動(dòng)態(tài)行為。 子類可以改變虛函數(shù)的行為,但不會(huì)影響父類中該函數(shù)的行為。這樣做的一個(gè)好處是,我們可以使用父類指針指向其子類的對(duì)象,然后在調(diào)用該虛函數(shù)時(shí),編譯器可以跟蹤該子類的實(shí)際類型,從而執(zhí)行相應(yīng)的函數(shù)調(diào)用。這使得我們可以通過(guò)指針來(lái)訪問(wèn)整個(gè)類層次結(jié)構(gòu)的成員,從而實(shí)現(xiàn)多態(tài)性。

            例如,請(qǐng)看以下的一個(gè)簡(jiǎn)單的程序,其中只包含一個(gè)簡(jiǎn)單的基類 Animal:

            ``` #include using namespace std; class Animal { public: virtual void speak()

            { cout << "This is an animal!" << endl; } };

            class Dog: public Animal { public: void

            speak() { cout << "This is a dog!" <<

            endl; } };

            int main() { Animal* animal1 = new Animal();

            Animal* animal2 = new Dog(); animal1->speak();

            animal2->speak(); return 0; } ```

            Output

            ``` This is an animal! This is a dog! ```

            可以看到,在基類 Animal 中定義了一個(gè)虛函數(shù)

            speak,其中輸出的是一句話“This is an animal!”。在派生類 Dog 中也定義了同樣一個(gè)函數(shù),只是輸出的語(yǔ)句改為了“This is a dog!”當(dāng)我們?cè)?main 函數(shù)中定義了兩個(gè) Animal 類對(duì)象,其中一個(gè)是Animal類型的,一是Dog類型的,并分別用它們的指針調(diào)用 speak 函數(shù)時(shí),我們會(huì)發(fā)現(xiàn)輸出的結(jié)果不同。這就是因?yàn)樵谂缮愔兄匦露x了虛函數(shù),改變了其行為。

            二、重載函數(shù)的定義和應(yīng)用

            跟虛函數(shù)不同,重載函數(shù)只是函數(shù)名相同,而函數(shù)的參數(shù)列表不同,它們由一個(gè)單獨(dú)的對(duì)象或函數(shù)的一組參數(shù)定義。函數(shù)重載主要目的是實(shí)現(xiàn)一種類似多態(tài)的效果,允許您對(duì)函數(shù)調(diào)用進(jìn)行不同的處理。當(dāng)您使用函數(shù)重載時(shí),可以使用相同的名稱定義不同的函數(shù),而不必使用不同的名稱。因此,重載函數(shù)有時(shí)也被稱為同名函數(shù)。

            例如,請(qǐng)看以下一個(gè)簡(jiǎn)單的程序:

            ``` #include using namespace std;

            void print(int i) { cout << "This is an

            integer: " << i << endl; }

            void print(double f) { cout << "This is a

            float: " << f << endl; }

            void print(char* c) { cout << "This is a

            character: " << c << endl; }

            int main() { int a = 100; double b = 56.89;

            char* c = "Hello C++!"; print(a); print(b);

            print(c); return 0; } ```

            Output

            ``` This is an integer: 100 This is a float:

            56.89 This is a character: Hello C++! ```

            可以看到,三個(gè)函數(shù)都被定義為 print,其名稱相同,但參數(shù)不同。在主函數(shù)中調(diào)用三個(gè)不同的函數(shù),并輸出三種不同的數(shù)據(jù)類型。

            三、虛函數(shù)和重載函數(shù)的區(qū)別 虛函數(shù)和重載函數(shù)都以多態(tài)的觀點(diǎn)來(lái)考慮函數(shù),但它們是有著一些不同的使用方法和應(yīng)用場(chǎng)景的。虛函數(shù)和重載函數(shù)的區(qū)別主要有以下幾點(diǎn):

            1.定義和用法不同

            虛函數(shù)必須在基類中聲明,由派生類重新定義,然后使用動(dòng)態(tài)綁定在運(yùn)行時(shí)調(diào)用派生類中的函數(shù)。而重載函數(shù)是用相同的名稱定義的,它們接收不同的參數(shù),然后在編譯時(shí)靜態(tài)綁定。

            2.處理方式不同

            虛函數(shù)需要使用函數(shù)的形式來(lái)支持多態(tài),因?yàn)樗鼈兛梢灾苯釉诔绦蜻\(yùn)行期間考慮使用的函數(shù)的實(shí)際類型。當(dāng)使用指向基類的指針來(lái)調(diào)用虛函數(shù)時(shí),編譯器會(huì)跟蹤該對(duì)象的實(shí)際類型并使用其指定的實(shí)現(xiàn)。對(duì)于重載函數(shù),這不起作用,因?yàn)樗鼈兪褂玫氖庆o態(tài)綁定,因此,要么實(shí)現(xiàn)的參數(shù)類型必須與調(diào)用時(shí)提供的參數(shù)類型完全匹配,要么顯式地進(jìn)行類型轉(zhuǎn)換。

            3.使用場(chǎng)景不同

            虛函數(shù)是用于多態(tài),當(dāng)想要在具有繼承關(guān)系的類中實(shí)現(xiàn)相同的函數(shù)時(shí),使用虛函數(shù)更為合適。而重載函數(shù)在不同情況下處理不同的數(shù)據(jù)類型,或者在相似情況下需要不同的參數(shù)類型時(shí)使用,更加合適。

            四、總結(jié) 雖然兩種不同的函數(shù)處理多態(tài)的方式不同,但它們基本上都支持相同的目標(biāo):實(shí)現(xiàn)多態(tài)。虛函數(shù)主要用于實(shí)現(xiàn)基于指針的運(yùn)行時(shí)多態(tài),而重載函數(shù)適用于實(shí)現(xiàn)編譯時(shí)的多態(tài)。在實(shí)際的編程中,我們應(yīng)該選擇正確的函數(shù)類型來(lái)滿足我們的需求。在一般情況下,當(dāng)想讓代碼更具可讀性、易維護(hù)性、強(qiáng)兼容性和可重用性的時(shí)候,我們應(yīng)該優(yōu)先使用虛函數(shù)實(shí)現(xiàn)多態(tài);當(dāng)想解決函數(shù)語(yǔ)義的歧義時(shí),我們可以考慮實(shí)現(xiàn)函數(shù)重載。那么,到底選擇哪種方式實(shí)現(xiàn)多態(tài),就需要根據(jù)具體的業(yè)務(wù)需求和實(shí)際情況進(jìn)行選擇。

            -

            虛函數(shù)與重載函數(shù)的關(guān)系

            本文發(fā)布于:2023-12-11 08:26:27,感謝您對(duì)本站的認(rèn)可!

            本文鏈接:http://www.newhan.cn/zhishi/a/1702254388240849.html

            版權(quán)聲明:本站內(nèi)容均來(lái)自互聯(lián)網(wǎng),僅供演示用,請(qǐng)勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除。

            本文word下載地址:虛函數(shù)與重載函數(shù)的關(guān)系.doc

            本文 PDF 下載地址:虛函數(shù)與重載函數(shù)的關(guān)系.pdf

            留言與評(píng)論(共有 0 條評(píng)論)
               
            驗(yàn)證碼:
            Copyright ?2019-2022 Comsenz Inc.Powered by ? 實(shí)用文體寫作網(wǎng)旗下知識(shí)大全大全欄目是一個(gè)全百科類寶庫(kù)! 優(yōu)秀范文|法律文書|專利查詢|
            主站蜘蛛池模板: 在线天堂中文新版www| 日本道精品一区二区三区| 中文字幕乱码亚洲美女精品| 国产一区二三区日韩精品| 六十路老熟妇乱子伦视频| 国产AV无码专区亚洲AV漫画 | 99热久久只有这里是精品| 老司机精品成人无码AV| 国产精品午夜福利资源| 一区二区三区四区在线| 国产欧美一区二区精品久久久| 永久免费av无码网站直播| 亚洲男人天堂一级黄色片| 亚洲av成人一区在线| 蜜桃伦理一区二区三区| 人妻中文字幕在线视频无码| 一本色道久久综合亚洲精品不卡| 免费无码一区二区三区蜜桃大| 二区中文字幕在线观看| 国产目拍亚洲精品区一区| 国产亚欧女人天堂AV在线 | 国产第一页浮力影院入口| 国产精品后入内射视频| 国产一区二区在线观看粉嫩| 国产精品毛片av999999| 蜜臀av久久国产午夜福利软件| 国产精品人妻久久无码不卡| 久久精品极品盛宴观看| 另类专区一区二区三区| 日本一区三区高清视频| 亚洲av无码牛牛影视在线二区| 久久精品伊人波多野结衣| 国产av区男人的天堂| 91精品国产一二三产区| 色欲久久久天天天综合网| 极品美女自拍偷精品视频| 双腿张开被5个男人调教电影| 国产精品午夜电影| 福利视频一区二区在线| 久久久精品免费国产四虎| 欧洲亚洲成av人片天堂网|