• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見(jiàn)諒!~
            隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            轉(zhuǎn)載一篇c++override與overload的好文

            今天看到師兄寫(xiě)的證書(shū)庫(kù)代碼,看到了一個(gè)很奇怪的東東,父類(lèi)里有一個(gè)不是虛函數(shù)的函數(shù),這個(gè)函數(shù)在子類(lèi)中被重新寫(xiě)了一遍,函數(shù)名,參數(shù)列表,返回值都一樣,就是在參數(shù)列表中的默認(rèn)值給的不太一樣。我覺(jué)得太詭異了。加上以前c++的重寫(xiě)和重載之類(lèi)的概念也好長(zhǎng)時(shí)間沒(méi)弄,糊涂了。真不知道這個(gè)四不像是什么了。在網(wǎng)上翻了一些文檔,發(fā)現(xiàn)這篇寫(xiě)的非常完整,而且和我想的也一樣。其實(shí)師兄的這種寫(xiě)法是非常ugly的。如果出現(xiàn)這種子類(lèi)中完全重新寫(xiě)了父類(lèi)的函數(shù),那么父類(lèi)就應(yīng)該將這個(gè)函數(shù)設(shè)為virtul的才對(duì)。當(dāng)然如果沒(méi)有設(shè)置,編譯也不會(huì)出錯(cuò),這種情況下,會(huì)出現(xiàn)hide隱藏。隱藏(hide):指的是派生類(lèi)的成員函數(shù)隱藏了基類(lèi)函數(shù)的成員函數(shù).隱藏一詞可以這么理解:在調(diào)用一個(gè)類(lèi)的成員函數(shù)的時(shí)候,編譯器會(huì)沿著類(lèi)的繼承鏈逐級(jí)的向上查找函數(shù)的定義,如果找到了那么就停止查找了,所以如果一個(gè)派生類(lèi)和一個(gè)基類(lèi)都有同一個(gè)同名(暫且不論參數(shù)是否相同)的函數(shù),而編譯器最終選擇了在派生類(lèi)中的函數(shù),那么我們就說(shuō)這個(gè)派生類(lèi)的成員函數(shù)"隱藏"了基類(lèi)的成員函數(shù),也就是說(shuō)它阻止了編譯器繼續(xù)向上查找函數(shù)的定義。而overload重載與繼承根本就沒(méi)關(guān)系,說(shuō)的是同一個(gè)作用域中,相同類(lèi)名,不同參數(shù)列表的現(xiàn)象。

            轉(zhuǎn)載的原文見(jiàn)下面:

            C++
            是一門(mén)magic的語(yǔ)言,很多機(jī)制復(fù)雜得讓人頭疼,但是這種迷宮競(jìng)走的狀態(tài)讓人精力十足,我發(fā)誓了,不搞明白不罷休,同時(shí)也希望得到高手們的指點(diǎn)和幫助~

            override  
            函數(shù)名和參數(shù)類(lèi)型以及返回類(lèi)型必須相同,即簽名都是一致的——或者叫相貌和衣服都是一樣的,一般用在繼承過(guò)程中。(高手判斷一下,除了實(shí)現(xiàn)細(xì)節(jié),其他的是不是什么都應(yīng)該相同?所以叫做重寫(xiě)”——C++編程思想》上是這么翻譯的。)

            overload  
            函數(shù)名必須相同,簽名必須不同(參數(shù)個(gè)數(shù),順序,類(lèi)型),返回類(lèi)型可以不同,用在同一個(gè)類(lèi)中,在編譯時(shí)候確定。

            以下是轉(zhuǎn)載的內(nèi)容:

            override  
            是指在不同作用域中,多個(gè)函數(shù)原型完全一樣,而實(shí)現(xiàn)卻不同的函數(shù)。在C++中,經(jīng)常發(fā)生在類(lèi)的繼承中。當(dāng)基類(lèi)中的某個(gè)方法是virtualpure virtual函數(shù)時(shí)

            (當(dāng)然訪問(wèn)權(quán)限必須是publicprotected,因?yàn)閺?span lang="EN-US">C++
            設(shè)計(jì)思想上來(lái)講private的函數(shù)不會(huì)是virtual的!!!這個(gè)請(qǐng)問(wèn)一下,是不是這樣的??),

               
            其子類(lèi)中對(duì)該方法的重新實(shí)現(xiàn)就屬于override(重寫(xiě))。

               
            使用時(shí),可以通過(guò)基類(lèi)的指針或者引用所指向的具體對(duì)象來(lái)確定調(diào)用的是哪個(gè)方法,從而實(shí)現(xiàn)函數(shù)的多態(tài)。

              
            (函數(shù)的多態(tài)?C++中實(shí)現(xiàn)多態(tài)性的手段之一嗎?還有多少其他的手段??)


               
            對(duì)于基類(lèi)中的非virtual類(lèi)型的成員函數(shù),若其子類(lèi)中也聲明了與該函數(shù)名稱相同的函數(shù),那么基類(lèi)中的該函數(shù)(也許是一系列函數(shù),如果該函數(shù)在基類(lèi)中有重載的話)將被隱藏,可以通過(guò)域解析操作符來(lái)調(diào)用。不過(guò)按照C++的設(shè)計(jì)思想來(lái)說(shuō)呢,基類(lèi)中的非virtual類(lèi)型的成員函數(shù),是不需要在子類(lèi)中進(jìn)行修改的,所以如果在子類(lèi)中出現(xiàn)了這種隱藏的情況,說(shuō)明應(yīng)該將基類(lèi)中的該函數(shù)改成virtual類(lèi)型的,然后就是override了!


                overload
            則是指在相同作用域中,多個(gè)函數(shù)具有相同的名字,但參數(shù)的數(shù)目和類(lèi)型各不相同(當(dāng)然相同數(shù)目和類(lèi)型,如果順序不同也是可以的),因?yàn)楹瘮?shù)重載的機(jī)制是在C++中函數(shù)的簽名與其參數(shù)有關(guān),而不像C中,只與函數(shù)名有關(guān)。


                
            總之,overrideoverload的一個(gè)最大的區(qū)別就是作用域不同,以及函數(shù)原型是否相同.



            override
                 覆蓋是子類(lèi)重寫(xiě)父類(lèi)的虛方法的一種形式。

            overload
                 重載是值允許存在重名的多個(gè)方法。而這些函數(shù)的參數(shù)列表不同(或者是參數(shù)
                          
            的個(gè)數(shù)不同、或者是參數(shù)的類(lèi)型不同或者兩者都不同)。


            重載(overload 與多態(tài)的概念無(wú)關(guān)) :因?yàn)槭窃诰幾g階段就確定的。

            只有在與運(yùn)行階段確定的才稱為面向?qū)ο蟮亩鄳B(tài)性。即override

            面向?qū)ο蟮膸讉€(gè)基本概念

            多態(tài):目的實(shí)現(xiàn)接口重用
            繼承:實(shí)現(xiàn)代碼重用。
            封裝:實(shí)現(xiàn)代碼的模塊化.

            override
            表示重寫(xiě),用于繼承類(lèi)對(duì)基類(lèi)中虛成員的實(shí)現(xiàn)

            overload
            表示重載,用于同一個(gè)類(lèi)中同名方法不同參數(shù)(包括類(lèi)型不同或個(gè)數(shù)不同)的實(shí)現(xiàn)

            posted on 2009-10-31 15:57 肥仔 閱讀(1752) 評(píng)論(1)  編輯 收藏 引用 所屬分類(lèi): C++ 基礎(chǔ)

            評(píng)論

            # re: 轉(zhuǎn)載一篇c++override與overload的好文  回復(fù)  更多評(píng)論   

            如果是private的成員,子類(lèi)并不能繼續(xù),聲明了virtual也沒(méi)用啊
            多態(tài)是面向?qū)ο蟮奶卣髦唬瑩?jù)我理解,嚴(yán)格(狹義)的多態(tài)應(yīng)該只有override
            因?yàn)榧热皇荗O,自然要涉及到類(lèi)的相關(guān)概念
            overload可以理解為一個(gè)廣義的多態(tài),同樣的方法名,表現(xiàn)出不同的形態(tài)
            2009-11-01 12:46 | Sunshine Alike
            色综合久久无码五十路人妻| 国内精品九九久久精品| 91精品国产高清久久久久久io| 久久狠狠高潮亚洲精品| 日本免费久久久久久久网站| 久久97久久97精品免视看| 狠狠色婷婷久久一区二区| 91精品国产综合久久久久久| 久久久久这里只有精品| 久久久久亚洲AV成人网人人网站 | 一级做a爰片久久毛片免费陪| 久久婷婷是五月综合色狠狠| 日日噜噜夜夜狠狠久久丁香五月| 99久久精品国产毛片| 7777精品久久久大香线蕉| 国产成人香蕉久久久久| 久久免费的精品国产V∧| 久久久久久久亚洲精品 | 午夜不卡888久久| 久久无码专区国产精品发布| 日本免费一区二区久久人人澡| 无码人妻少妇久久中文字幕蜜桃| 久久无码国产| 大蕉久久伊人中文字幕| 久久天天躁狠狠躁夜夜躁2O2O| 亚洲AⅤ优女AV综合久久久| www性久久久com| 久久亚洲AV成人无码国产| 国产精品99久久久久久宅男小说| 国内精品久久久久国产盗摄| 日本免费久久久久久久网站| 久久精品国产亚洲av影院| 亚洲国产欧美国产综合久久| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 国产一区二区精品久久| 久久无码人妻一区二区三区午夜| 老男人久久青草av高清| 精产国品久久一二三产区区别| 97精品伊人久久大香线蕉| 亚洲精品国精品久久99热| 伊人久久大香线蕉AV一区二区|