<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • C語言模式中如何實(shí)現(xiàn)C++繼承和多態(tài)-創(chuàng)新互聯(lián)

            這篇文章主要介紹C語言模式中如何實(shí)現(xiàn)C++繼承和多態(tài),文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

            成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比龍南網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式龍南網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋龍南地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。

            這個(gè)問題主要考察的是C和C++的區(qū)別,以及C++中繼承和多態(tài)的概念。

            C和C++的區(qū)別

            C語言是面向過程的語言,而C++是面向?qū)ο蟮倪^程。

            什么是面向?qū)ο蠛兔嫦蜻^程?

            面向過程就是分析解決問題的步驟,然后用函數(shù)把這些步驟一步一步的進(jìn)行實(shí)現(xiàn),在使用的時(shí)候進(jìn)行一一調(diào)用就行了,注重的是對于過程的分析。面向?qū)ο髣t是把構(gòu)成問題的事進(jìn)行分成各個(gè)對象,建立對象的目的也不僅僅是完成這一個(gè)個(gè)步驟,而是描述各個(gè)問題在解決的過程中所發(fā)生的行為。

            面向?qū)ο蠛兔嫦蜻^程的區(qū)別?

            • 面向過程的設(shè)計(jì)方法采用函數(shù)來描述數(shù)據(jù)的操作,但將函數(shù)與操作的數(shù)據(jù)進(jìn)行分離開來。

            • 面向?qū)ο蟮脑O(shè)計(jì)方法是將對象和數(shù)據(jù)進(jìn)行封裝起來成為一個(gè)整體。

            • 面向過程以設(shè)計(jì)步驟為過程,后期難以維護(hù)。

            • 面向?qū)ο笤O(shè)計(jì)以數(shù)據(jù)為中心,數(shù)據(jù)相對與功能來說具有較強(qiáng)的穩(wěn)定性更加易于維護(hù)。

            面向?qū)ο蟮娜筇卣?/strong>

            封裝:

            對于封裝來說就是數(shù)據(jù)與具體操作實(shí)現(xiàn)的代碼都放在某個(gè)對象的內(nèi)部,使這些代碼的具體細(xì)節(jié)不被外界發(fā)現(xiàn),只留下一些接口供外部來使用,而不能一任何的形式來對象內(nèi)部的實(shí)現(xiàn)。使用封裝能夠隱藏具體的實(shí)現(xiàn)的細(xì)節(jié),使代碼更加易于維護(hù)并且保證了系統(tǒng)的安全性。

            繼承:

            繼承機(jī)制是面向?qū)ο蟪绦蛟O(shè)計(jì)使代碼進(jìn)行復(fù)用的最重要的手段,他允許程序員在保證類原有類特性的基礎(chǔ)上進(jìn)行擴(kuò)展來增加功能。這樣新產(chǎn)生的類就被稱為派生類,繼承就可以表現(xiàn)面向?qū)ο髾C(jī)制的的層次結(jié)構(gòu)。

            多態(tài):

            多態(tài)簡單點(diǎn)說就是“一個(gè)接口,多種實(shí)現(xiàn)”,就是同一種事物表現(xiàn)出的多種形態(tài)。多態(tài)在面向?qū)ο笳Z言中是指:接口多種的不同實(shí)現(xiàn)方式。也就是復(fù)用相同接口,實(shí)現(xiàn)不同操作。

            C++多態(tài)支持兩種多態(tài)性,編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。編譯時(shí)多態(tài)是通過重載函數(shù)來實(shí)現(xiàn)的,運(yùn)行時(shí)多態(tài)是通過虛函數(shù)來實(shí)現(xiàn)的。靜態(tài)多態(tài):編譯器在編譯期間完成,編譯器根據(jù)函數(shù)實(shí)參的類型(可能會(huì)隱式類型轉(zhuǎn)換),可推斷出要調(diào)用哪個(gè)函數(shù),如果有對應(yīng)的函數(shù)就調(diào)用相應(yīng)的函數(shù),否則就報(bào)一個(gè)編譯錯(cuò)誤。動(dòng)態(tài)多態(tài):在函數(shù)執(zhí)行期間(非編譯期)判斷所引用對象的實(shí)際類型,根據(jù)實(shí)際類型的調(diào)用相應(yīng)的方法。使用virtual關(guān)鍵字修飾類的成員函數(shù),指明該函數(shù)為虛函數(shù),派生類需要重新實(shí)現(xiàn),編譯器將實(shí)現(xiàn)動(dòng)態(tài)綁定。

            動(dòng)態(tài)多態(tài)實(shí)現(xiàn)的條件:

            1>、使用場景:父類的指針或者引用指向父類或者子類的對象(由賦值兼容規(guī)則決定);

            2>、實(shí)現(xiàn)多態(tài)的兩個(gè)條件:虛函數(shù)的重寫;父類的指針或者引用調(diào)用重寫的虛函數(shù)。

            3>、若父類中的成員函數(shù)加上virtual關(guān)鍵字,則子類中重寫的該函數(shù)默認(rèn)virtual,可以不指定,但是一般加上;

            重寫:子類重寫父類的虛函數(shù),要求函數(shù)名稱,函數(shù)參數(shù),返回值完全一樣(協(xié)變除外);

            總的來說:封裝可以隱藏實(shí)現(xiàn)細(xì)節(jié)包括包含私有成員,使得代碼模塊增加安全指數(shù);繼承可以擴(kuò)展已存在的模塊,為了增加代碼的復(fù)用性;多態(tài)則是為了保證類在繼承和派生的時(shí)候,類的實(shí)例被正確調(diào)用,實(shí)現(xiàn)了接口的重用

            C模擬實(shí)現(xiàn)多態(tài)

            C++中的多態(tài)

            我們知道的是在C++中會(huì)維護(hù)一張?zhí)摵瘮?shù)表,根據(jù)賦值兼容規(guī)則,我們知道父類的指針或者引用是可以指向子類對象的。如果一個(gè)父類的指針或者引用調(diào)用父類的虛函數(shù)則該父類的指針會(huì)在自己的虛函數(shù)表中查找自己的函數(shù)地址,如果該父類對象的指針或者引用指向的是子類的對象,而且該子類已經(jīng)重寫了父類的虛函數(shù),則該指針會(huì)調(diào)用子類的已經(jīng)重寫的虛函數(shù)。

            //c++中的多態(tài)
            
            class A
            {
            public:
              virtual void fun()//虛函數(shù)實(shí)現(xiàn)
              {
                cout << "Base A::fun() " << endl;
              }
            };
            
            class B:public A
            {
            public:
              virtual void fun()//虛函數(shù)實(shí)現(xiàn),子類中virtual關(guān)鍵字可以沒有
              {
                cout << "Derived B::fun() " << endl;
              }
            };
            
            void Test1()
            {
              A a;//基類對象
              B b;//派生類對象
            
              A* pa = &a;//父類指針指向父類對象
              pa->fun();//調(diào)用父類的函數(shù)
            
              pa = &b; //父類指針指向子類對象,多態(tài)實(shí)現(xiàn)
              pa->fun();//調(diào)用派生類同名函數(shù)
            }

            C語言模式中如何實(shí)現(xiàn)C++繼承和多態(tài)

            c語言實(shí)現(xiàn)多態(tài)

            我們知道在C語言中是沒有class類這個(gè)概念的,但是有struct結(jié)構(gòu)體,我們可以考慮使用struct來模擬;但是在C語言的結(jié)構(gòu)體內(nèi)部是沒有成員函數(shù)的,如果實(shí)現(xiàn)這個(gè)父結(jié)構(gòu)體和子結(jié)構(gòu)體共有的函數(shù)呢?我們可以考慮使用函數(shù)指針來模擬。但是這樣處理存在一個(gè)缺陷就是:父子各自的函數(shù)指針之間指向的不是類似C++中維護(hù)的虛函數(shù)表而是一塊物理內(nèi)存,如果模擬的函數(shù)過多的話就會(huì)不容易維護(hù)了。

            //C實(shí)現(xiàn)動(dòng)態(tài),用到函數(shù)指針
            
            typedef void(*FUN)();//重定義一個(gè)函數(shù)指針類型
            
            //父類
            struct Base 
            {
              FUN _f;
            };
            
            //子類
            struct Derived
            {
              Base _b;//在子類中定義一個(gè)基類的對象即可實(shí)現(xiàn)對父類的繼承
            };
            
            
            void FunB()
            {
              printf("%s\n", "Base::fun()");
            }
            void FunD()
            {
              printf("%s\n", "Derived::fun()");
            }
            
            void Test2()
            {
              Base b;//父類對象
              Derived d;//子類對象
            
              b._f = FunB;//父類對象調(diào)用父類同名函數(shù)
              d._b._f = FunD;//子類調(diào)用子類的同名函數(shù)
            
              Base *pb = &b;//父類指針指向父類對象
              pb->_f();
            
              pb = (Base *)&d;//讓父類指針指向子類的對象,由于類型不匹配所以要進(jìn)行強(qiáng)轉(zhuǎn)
              pb->_f();
            
            }

            C語言模式中如何實(shí)現(xiàn)C++繼承和多態(tài)

            以上是“C語言模式中如何實(shí)現(xiàn)C++繼承和多態(tài)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

            另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.jbt999.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

            網(wǎng)站題目:C語言模式中如何實(shí)現(xiàn)C++繼承和多態(tài)-創(chuàng)新互聯(lián)
            標(biāo)題網(wǎng)址:http://www.jbt999.com/article46/psjhg.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈網(wǎng)站收錄、云服務(wù)器、建站公司、服務(wù)器托管、小程序開發(fā)

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 成人网站污污 | 五月天操屄视频 | 国产成人在线观看免费网站 | 39日韩操逼视频 | 国产亚洲综合AV婷婷 |