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

            搜索

            •  

            積分與排名

            • 積分 - 52520
            • 排名 - 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++ 炒冷飯
            无码人妻精品一区二区三区久久| 午夜不卡久久精品无码免费| 国内精品伊人久久久久影院对白| 久久久久国产| 日韩精品无码久久久久久| 久久精品国产99国产电影网| 久久久久99这里有精品10| 2021久久精品国产99国产精品| 久久伊人中文无码| 久久成人精品视频| 精品久久久久成人码免费动漫| 国产成人久久精品一区二区三区| 亚洲一级Av无码毛片久久精品| 国产精品天天影视久久综合网| 久久久久久久波多野结衣高潮 | 久久精品国产亚洲av麻豆色欲| 日本人妻丰满熟妇久久久久久| 久久久久亚洲AV综合波多野结衣 | 久久99久久99精品免视看动漫| 99久久免费国产精精品| 亚洲精品成人久久久| 国产99久久久国产精品~~牛 | 99久久国产综合精品网成人影院| 久久中文字幕人妻丝袜| 久久免费99精品国产自在现线| 秋霞久久国产精品电影院| 久久婷婷五月综合97色 | 国产精品嫩草影院久久| 国产成人久久精品激情 | 国产人久久人人人人爽| 日本欧美久久久久免费播放网| 无码八A片人妻少妇久久| 2021国内久久精品| 一本一本久久a久久综合精品蜜桃| 久久亚洲精品无码播放| 久久婷婷色香五月综合激情| 人妻无码精品久久亚瑟影视| 久久亚洲AV成人无码| 无码精品久久久天天影视 | 久久中文字幕一区二区| 婷婷综合久久中文字幕|