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

            搜索

            •  

            積分與排名

            • 積分 - 52498
            • 排名 - 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 閱讀(334) 評論(0)  編輯 收藏 引用 所屬分類: Effective C++ 炒冷飯
            久久精品国产精品亚洲艾草网美妙| 97精品伊人久久大香线蕉app| 99久久无码一区人妻| 久久www免费人成看国产片| 久久精品国产精品亚洲精品| 国产一级持黄大片99久久| 伊人久久大香线蕉综合5g| 久久国产精品久久| 久久99久久无码毛片一区二区| 亚洲精品无码久久久| 国产精品禁18久久久夂久| 久久人人爽人人爽人人片AV不| 久久久久人妻精品一区| 久久综合九色综合网站| 日韩AV毛片精品久久久| 99久久国产主播综合精品| 亚洲精品无码专区久久久| 亚洲欧美成人久久综合中文网 | 蜜桃麻豆www久久国产精品| 韩国免费A级毛片久久| 婷婷久久综合九色综合绿巨人| 久久精品成人免费看| 久久天天躁狠狠躁夜夜躁2O2O| 国产精品99久久久久久宅男小说| 久久精品国产久精国产思思| 亚洲人AV永久一区二区三区久久| 国产精品18久久久久久vr| 伊人久久大香线蕉综合影院首页| 国产成年无码久久久免费| 久久久精品视频免费观看 | 久久精品免费大片国产大片| 久久99精品久久久久久久久久| 国产激情久久久久久熟女老人| 久久综合九色综合久99| 久久久精品久久久久久 | 亚洲精品乱码久久久久久 | 精品人妻伦九区久久AAA片69| 国产精品一久久香蕉国产线看观看| 午夜精品久久久久久中宇| 日韩精品无码久久久久久| 久久精品国产亚洲av日韩|