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

            關(guān)于工作和讀書的筆記

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

            留言簿(14)

            搜索

            •  

            積分與排名

            • 積分 - 52498
            • 排名 - 433

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            [原創(chuàng)文章歡迎轉(zhuǎn)載,但請(qǐng)保留作者信息]
            Justin 于 2010-01-18

            因?yàn)镃yclops項(xiàng)目的啟動(dòng),讀書的進(jìn)度顯然慢了很多。不過還是那句話:學(xué)習(xí)可以中斷,但是不能終止。還是要逼自己不停讀書做筆記的。

            今天就進(jìn)入第六章了,繼承與面向?qū)ο螅琌O。
            32條軍規(guī)比較古老了:公有繼承(public inheritance)是典型的“是一個(gè)”(is-a)模型。

            例子也很簡(jiǎn)單:男人“是一個(gè)”人,男人“公有繼承”了人。“人”都能去的地方,“男人”也應(yīng)該能去;“男人”能干的事,“人”卻不一定可以干@#¥%

            但是實(shí)際情況中很多“是一個(gè)”的體現(xiàn)并不那么純粹:大師說“鳥”都會(huì)飛,但是實(shí)際上是有不會(huì)飛的“鳥”的。

            在公有繼承中,有兩種辦法來解決這種“不純粹”:
            ?- 多重繼承。對(duì)于“鳥”的例子,設(shè)計(jì)一個(gè)“鳥”類,然后從中派生出一個(gè)“不會(huì)飛的鳥”類和一個(gè)“會(huì)飛的鳥”類,然后再在它們之中分別派生其他具體的“鳥”們。
            ?- 允許運(yùn)行時(shí)出錯(cuò)。還是“鳥”的例子,對(duì)于每一個(gè)“鳥”類的派生類,不管它是不是能飛,都會(huì)有個(gè)“飛”的函數(shù)。不同的是,能飛的“鳥”就直接飛了,不能飛的“鳥”則會(huì)在“飛”函數(shù)里說:”對(duì)不起,我不能飛,找別人去吧……”(所謂的運(yùn)行時(shí)錯(cuò)誤,runtime error)

            剩下的也沒什么好說的了,大師要求的不多:牢記公有繼承是典型的“是一個(gè)”模型。

            item 33之所以放在這里一起記,是因?yàn)榇_實(shí)沒有太多要記的。說到底就是C++的名字查找規(guī)則。
            完整的規(guī)則我還不知道,書里也沒說。不過一個(gè)大致的規(guī)則還是有的,類似剝洋蔥:

            • 先在本地域中查找(local scope,比如說函數(shù)內(nèi)部)是否有該名字的定義,如果沒有找到->
            • ???往外一層名字域(比如說函數(shù)所在的類)中查找,如果沒有找到???????????????????????????????? ->
            • ????? 再往外一層名字域(比如說函數(shù)所在類的父類)中查找,如果沒有找到????????????????????->
            • ???????? 繼續(xù)忘外一層名字域中查找(比如說函數(shù)所在類的父類的父類,等等),一直找到全局名字域(global scope)還是沒找到的話,就報(bào)告錯(cuò)誤。

            但是總會(huì)有這樣的情況,在“洋蔥”的內(nèi)部某層定義了和外部某層一樣名字的函數(shù):使得位于內(nèi)部的函數(shù)“屏蔽”了外部的同名函數(shù)(哪怕兩個(gè)函數(shù)擁有不同的參數(shù)表)。
            大師說:
            第一,在公有繼承中,上述的情況是不允許存在的,因?yàn)閺亩x上來說,公有繼承中的子類應(yīng)該具備父類所有的特征和功能,應(yīng)該“是一個(gè)”父類。
            第二,如果在上述情況中需要調(diào)用/訪問被“屏蔽”的函數(shù)/對(duì)象,有兩個(gè)方法可以采用:

            1. using。用using“聲明”過完整的名字后,就可以“看見”并使用這個(gè)函數(shù)/對(duì)象了。
            2. 踢皮球函數(shù)(forwarding functions)。編寫一個(gè)函數(shù),把真正的活踢給別人……

            兩種方法示例見下,Derived_0是有“屏蔽”問題的類,Derived_1和Derived_2分別是采用了第一種和第二種方法的類。

            class ?Base {
            public :
            ???
            virtual ? void ?func_1();
            ???
            virtual ? void ?func_1( int ?param);
            // ..
            }


            class ?Derived_0:? public ?Base {
            public :
            ???
            virtual ? void ?func_1();
            // ..
            }


            class ?Derived_1:? public ?Base {
            public :
            ???
            using ?Base::func_1;
            ???
            virtual ? void ?func_1();
            // ..
            }


            class ?Derived_2:? private ?Base {
            public :
            ???
            virtual ? void ?func_1();
            ???
            virtual ? void ?func_1( int ?param)
            ???
            {?Base::func_1(param);}
            // ..
            }

            個(gè)人覺得,第一種方法應(yīng)該更漂亮些……?

            posted on 2010-02-08 16:32 Justin.H 閱讀(388) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Effective C++ 炒冷飯
            久久精品亚洲男人的天堂| 久久久久久久免费视频| 亚洲伊人久久精品影院| 亚洲精品无码久久久久久| 久久久91精品国产一区二区三区 | 精品久久久一二三区| 狠狠色婷婷综合天天久久丁香 | 久久一区二区免费播放| 久久国产精品久久国产精品| 久久亚洲精品无码播放| 久久久久亚洲精品无码蜜桃 | 久久久久国产一区二区三区| 久久久久高潮综合影院| 久久精品桃花综合| 欧美激情精品久久久久| 日韩人妻无码精品久久免费一| 色综合久久久久综合99| 日日狠狠久久偷偷色综合0| 国产精品99久久99久久久| 国产精品久久久久久吹潮| 久久午夜无码鲁丝片秋霞| 国内精品欧美久久精品| 国产精品美女久久久网AV| 精品无码久久久久久久久久| 久久精品亚洲中文字幕无码麻豆| 亚洲国产综合久久天堂| 久久强奷乱码老熟女网站| 日产久久强奸免费的看| 国产农村妇女毛片精品久久| 国产精品久久久久久久久鸭 | 久久精品国产精品亚洲精品| 老色鬼久久亚洲AV综合| 亚洲国产精品成人久久| 久久无码AV一区二区三区| 性做久久久久久久久老女人| 国产综合精品久久亚洲| 久久久WWW成人| 久久久久亚洲爆乳少妇无| 狠狠精品干练久久久无码中文字幕| 91久久精品无码一区二区毛片| 亚洲AⅤ优女AV综合久久久|