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

            Note of Justin

            關于工作和讀書的筆記

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              47 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks

            留言簿(14)

            搜索

            •  

            積分與排名

            • 積分 - 52711
            • 排名 - 433

            最新評論

            閱讀排行榜

            評論排行榜

            [原創文章歡迎轉載,但請保留作者信息]
            Justin 于 2010-01-21

            Scott 在這一章講述了子類繼承父類接口和實現的三種方式:

            1. 父類僅提供接口。將接口函數定義為純虛函數就可以實現這一繼承方式,因為子類必須為父類的純虛函數提供具體的實現。這等于對子類說:接口已經給你定義好了,就按照這樣寫,去吧,好好干。
            2. 父類提供接口,以及一個默認的實現方式。在這種方式中,函數接口被定義為一個普通的虛函數,它在父類中就有實現。子類對象可以重新譜寫不一樣的函數內容(但接口的形式不變),也可以偷偷懶,直接拿來主義,用父類的實現就好了。
            3. 父類提供接口,同時還綁定了實現方式。這種情況下的接口函數其實就是一個普通的非虛函數,子類對象只有接受的義務,沒有重新定義哪怕修改的權利。
            下面簡單的例子分別說明了上面的三種情況:
            class ?AClass {
            public :
            ???
            virtual ? void ?interface_1()? = ? 0 ;
            ???
            virtual ? void ?interface_2()
            ???
            { /* the?default?implementation..*/
            }
            ??? void ?interface_3()
            ???
            { /* the?compulsory?implementation..*/
            }
            // ..
            }
            ;

            class ?AClassDerived {
            public :
            ???
            virtual ? void ?interface_1()
            ???
            { /* OK?you?have?to?implement?this..*/
            }
            ??? virtual ? void ?interface_2()
            ???
            { /* you?can,?but?don't?have?to?implement?this..*/
            }
            ??? // ?void?interface_3()
            ???
            // ?{you?can't?implement?your?own..}

            }
            ;

            以上就是今天課堂的主要內容。同時Scott還提到了一種介于1和2之間的實現方式:就當成是1.5吧。這樣做的好處是:對于子類來說,父類提供了完整的接口,以及默認的實現方式(非公有的,不用擔心具體實現被泄露);同時子類必須顯式地說明是要采用默認的實現,還是要自己寫。避免了因為忘記實現子類的接口函數而“不知不覺”地用了父類的接口實現。

            class ?AClass {
            public :
            ???
            virtual ? void ?interface_1. 5 ()? = ? 0 ;
            // ..
            protected :
            ???
            void ?default_interface_1. 5 ()
            ???
            { /* ..*/
            }
            // ..
            }
            ;

            class ?AClassDerived {
            public :
            ???
            virtual ? void ?interface_1. 5 ()
            ???
            {
            ??????
            // you?can?either?do?this
            ??????default_interface_1. 5 ();
            ??????
            // or?implement?in?your?own?way..
            ???}

            // ..
            }
            ;

            除此之外,其實大師還提到了1.5的另外一種實現:聲明一個純虛函數作為接口,然后再為該純虛函數定義實現。但是我竊以為這種方法實在過于詭異(為純虛函數定義實現),而且如大師所說這樣做的同時也暴露了接口的實現(因為這種情況下的實現是公有的),想了一下,還是不記了。若真有必要,去看書罷。

            posted on 2010-02-22 09:48 Justin.H 閱讀(338) 評論(0)  編輯 收藏 引用 所屬分類: Effective C++ 炒冷飯
            国内高清久久久久久| 久久婷婷五月综合色99啪ak| 婷婷久久综合九色综合绿巨人 | 久久亚洲色一区二区三区| 精品无码久久久久久国产| 久久伊人五月丁香狠狠色| 精品久久香蕉国产线看观看亚洲| 久久久91精品国产一区二区三区 | 国产精品欧美久久久久无广告| 思思久久99热只有频精品66| 久久亚洲精品无码AV红樱桃| 青青青青久久精品国产h久久精品五福影院1421| 91精品国产高清91久久久久久| 久久这里的只有是精品23| 日本福利片国产午夜久久| 四虎亚洲国产成人久久精品| 久久成人国产精品| 午夜精品久久久久久久| 久久久久久久久66精品片| 国产欧美一区二区久久| 久久精品国产亚洲AV久| 狠狠色丁香久久婷婷综合_中 | 久久中文娱乐网| 伊人久久精品无码二区麻豆| 久久精品国产只有精品66| 国产精品无码久久四虎| 久久久久成人精品无码中文字幕 | 久久午夜综合久久| 精品久久久久久综合日本| 久久成人国产精品| 日日躁夜夜躁狠狠久久AV| 亚洲国产日韩综合久久精品| 久久精品国产福利国产琪琪| 97精品伊人久久久大香线蕉| 免费国产99久久久香蕉| 亚洲AV无码久久| 性色欲网站人妻丰满中文久久不卡| 亚洲伊人久久成综合人影院| 久久久久亚洲AV成人网人人网站 | 免费一级做a爰片久久毛片潮| 久久精品人人做人人爽电影|