• <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>

            幽魂國度

             

            C++中的接口與實(shí)現(xiàn)

                    所謂接口繼承,就是派生類只繼承函數(shù)的接口,也就是聲明;而實(shí)現(xiàn)繼承,就是派生類同時繼承函數(shù)的接口和實(shí)現(xiàn)。
                   我們都很清楚C++中有幾個基本的概念,虛函數(shù)、純虛函數(shù)、非虛函數(shù)。
                   虛函數(shù)
                   C++實(shí)現(xiàn)運(yùn)行中的多態(tài)性是通過虛函數(shù)實(shí)現(xiàn)的,而虛函數(shù)必須存在于繼承環(huán)境下。
                   因此,虛函數(shù)是指一個類中你希望進(jìn)行重載的成員函數(shù),當(dāng)你用一個基類指針或引用指向一個繼承類對象的時候,你調(diào)用一個虛函數(shù),實(shí)際調(diào)用的是繼承類的成員函數(shù)。虛函數(shù)用來表現(xiàn)基類和派生類的成員函數(shù)之間的一種關(guān)系。虛函數(shù)的定義在基類中進(jìn)行,在需要定義為虛函數(shù)的成員函數(shù)的聲明前冠以關(guān)鍵字,如 virtual void func() 。 基類中的某個成員函數(shù)被聲明為虛函數(shù)后,此虛函數(shù)就可以在一個或多個派生類中被重新定義. 在派生類中重新定義時,其函數(shù)原型,包括返回類型、函數(shù)名、參數(shù)個數(shù)、參數(shù)類型及參數(shù)的先后順序,都必須與基類中的原型完全相同。
                    虛函數(shù)是重載的一種表現(xiàn)形式,是一種動態(tài)的重載方式。
                   只有類的普通成員函數(shù)可以定義為虛函數(shù),全局函數(shù)及靜態(tài)成員函數(shù)(類擁有)不能聲明為虛函數(shù)。
                   純虛函數(shù):
                    純虛函數(shù)在基類中沒有定義且只能在基類中定義,但未給出具體的函數(shù)定義體(實(shí)現(xiàn)),它們被初始化為0。任何用純虛函數(shù)派生的類,都要自己提供該函數(shù)的具體實(shí)現(xiàn)。
                     定義純虛函數(shù):virtual void func() = 0;
                     定義了純虛函數(shù)的類被稱之為抽象類。抽象類定義一族派生類的共同接口,而接口的完整實(shí)現(xiàn),即純虛函數(shù)的函數(shù)體,由派生類自己定義。
            例://class Shape
                   public:
                             virtual void area()=0; // 純虛函數(shù)
                    //class Tringle : public Shape  //公有繼承
                   public:
                            void area() {//}                /接口與實(shí)現(xiàn)
                     抽象類可以有多個純虛函數(shù),也可以定義其他虛函數(shù)。若派生類沒有重新定義純虛函數(shù),那么該派生類也稱之為純虛函數(shù)。
                     純虛函不需要定義其實(shí)際操作,它的存在只是為了在派生類中被重新定義,只是提供一個多態(tài)接口
                   非虛函數(shù)
                   一般成員函數(shù),無virtual關(guān)鍵字修飾。
                    至于為什么要定義這些函數(shù),我們可以將虛函數(shù)、純虛函數(shù)和非虛函數(shù)的功能與接口繼承實(shí)現(xiàn)繼承聯(lián)系起來:
                     如前所述,聲明一個純虛函數(shù)(pure virtual)的目的是為了讓派生類只繼承函數(shù)接口,也就是上面說的接口繼承。
                    純虛函數(shù)一般是在不方便具體實(shí)現(xiàn)此函數(shù)的情況下使用。也就是說基類無法為繼承類規(guī)定一個統(tǒng)一的缺省操作,但繼承類又必須含有這個函數(shù)接口,并對其分別實(shí)現(xiàn)。但是,在C++中,我們是可以為純虛函數(shù)提供定義的,只不過這種定義對繼承類來說沒有特定的意義。因?yàn)槔^承類仍然要根據(jù)各自需要實(shí)現(xiàn)函數(shù)。
                    通俗說,純虛函數(shù)就是要求其繼承類必須含有該函數(shù)接口,并對其進(jìn)行實(shí)現(xiàn)。是對繼承類的一種接口實(shí)現(xiàn)要求,但并不提供缺省操作,各個繼承類必須分別實(shí)現(xiàn)自己的操作。
                    聲明非純虛函數(shù)(impure virtual)的目的是讓繼承類繼承該函數(shù)的接口和缺省實(shí)現(xiàn)。
                    與純虛函數(shù)唯一的不同就是其為繼承類提供了缺省操作,繼承類可以不實(shí)現(xiàn)自己的操作而采用基類提供的默認(rèn)操作。
                    聲明非虛函數(shù)(non-virtual)的目的是為了令繼承類繼承函數(shù)接口及一份強(qiáng)制性實(shí)現(xiàn)。
                    相對于虛函數(shù)來說,非虛函數(shù)對繼承類要求的更為嚴(yán)格,繼承類不僅要繼承函數(shù)接口,而且也要繼承函數(shù)實(shí)現(xiàn)。也就是為繼承類定義了一種行為。
             總結(jié)
                    純虛函數(shù):要求繼承類必須含有某個接口,并對接口函數(shù)實(shí)現(xiàn)。
                    虛函數(shù):繼承類必須含有某個接口,可以自己實(shí)現(xiàn),也可以不實(shí)現(xiàn),而采用基類定義的缺省實(shí)現(xiàn)。
                    非虛函數(shù):繼承類必須含有某個接口,必須使用基類的實(shí)現(xiàn)。
                     一個C++類有著兩個重要的方面:用于描述行為的公共接口,以及行為的私有實(shí)現(xiàn)。
                   大多數(shù)的繼承都是公有繼承:派生類繼承了基類的接口和實(shí)現(xiàn)。不過,我們也可以進(jìn)行有選擇的繼承,即派生類可以只繼承接口或?qū)崿F(xiàn)。私有基類,只繼承實(shí)實(shí)現(xiàn),沒有接口;公有繼承基類,繼承接口,但繼承的實(shí)現(xiàn)可能是不完整的或不存在的(純虛函數(shù))。
             例:
            我們可以用函數(shù):
             Triangle t;
             t.area();
            我們只是使用了其接口,但具體的實(shí)現(xiàn)可以不知道。void area() {......}

            posted on 2009-11-21 20:20 閱讀(1649) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            综合久久给合久久狠狠狠97色 | 久久久久久国产精品免费免费| 狠狠色丁香久久综合婷婷| 国产精品天天影视久久综合网| 国产2021久久精品| 综合人妻久久一区二区精品| 久久精品国产第一区二区三区 | 麻豆成人久久精品二区三区免费| 99久久er这里只有精品18| 久久精品三级视频| 久久精品国产免费观看三人同眠| 成人久久精品一区二区三区| 一级a性色生活片久久无| 国产精品久久久久久| 精品综合久久久久久98| 久久人人爽人人爽AV片| 久久精品国产亚洲麻豆| 狠狠综合久久综合88亚洲 | 伊人久久成人成综合网222| 精品国际久久久久999波多野| 欧美伊人久久大香线蕉综合69| 精品久久久久久久| 精品久久人妻av中文字幕| 久久亚洲AV无码精品色午夜麻豆| 久久精品一区二区| 久久综合丝袜日本网| 久久九九精品99国产精品| 无码精品久久久天天影视| 97精品伊人久久大香线蕉| 无码任你躁久久久久久老妇| 香蕉久久夜色精品国产小说| 久久精品国产一区| 66精品综合久久久久久久| 久久国产高清字幕中文| 久久精品aⅴ无码中文字字幕不卡| 久久国产免费直播| 国产成人精品综合久久久| 日本久久久久亚洲中字幕| 亚洲精品蜜桃久久久久久| 久久亚洲精品人成综合网| 国内精品久久久久久99|