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

            搜索

            •  

            積分與排名

            • 積分 - 53109
            • 排名 - 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 閱讀(344) 評論(0)  編輯 收藏 引用 所屬分類: Effective C++ 炒冷飯
            麻豆精品久久久一区二区| 久久激情亚洲精品无码?V| 精品国产乱码久久久久久呢| 久久青青色综合| 性欧美丰满熟妇XXXX性久久久| 久久精品国产99久久久| 成人国内精品久久久久影院| 浪潮AV色综合久久天堂| 久久精品国产亚洲av麻豆小说| 久久国产乱子精品免费女| 久久亚洲国产成人影院| 久久最近最新中文字幕大全| 一级做a爰片久久毛片看看| 久久99精品国产麻豆| 久久免费99精品国产自在现线| 欧美黑人又粗又大久久久| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久国内免费视频| 狠色狠色狠狠色综合久久| 精品久久久久成人码免费动漫| 国产精品视频久久久| 亚洲日韩中文无码久久| 亚洲日本va午夜中文字幕久久| 国产精品美女久久久免费| 国产午夜久久影院| 狠狠色综合久久久久尤物| 精品熟女少妇av免费久久| 亚洲AV日韩精品久久久久久久| 亚洲精品NV久久久久久久久久 | 久久只有这精品99| 亚洲精品成人久久久| 蜜桃麻豆WWW久久囤产精品| 精品久久人人做人人爽综合| www亚洲欲色成人久久精品| 久久九九亚洲精品| 久久99精品综合国产首页| 国产精品久久久久久吹潮| 久久久精品人妻一区二区三区四| 一本色道久久99一综合| 精品免费久久久久久久| 99久久精品国产综合一区|