青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Note of Justin

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

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

留言簿(14)

搜索

  •  

積分與排名

  • 積分 - 53598
  • 排名 - 433

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

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

前面已經(jīng)學(xué)過,用虛函數(shù)來實(shí)現(xiàn)接口是再自然不過的事情。這里要說的是,除了直接單純使用虛函數(shù)機(jī)制,還有一些別的方法。

大師說的第一種,是模板模式,利用非虛擬接口函數(shù)(Non-Virtual Interface, NVI)來實(shí)現(xiàn)。此模板(設(shè)計(jì)模式中的模板方法,template method)非彼模板(C++中的模板,template),而且也沒那么難:

在父類中提供一個(gè)公有函數(shù)(接口),然后在其中調(diào)用真正干活的私有虛函數(shù)(默認(rèn)實(shí)現(xiàn));子類對(duì)象通過公有繼承自然得到了這個(gè)函數(shù)(接口),如果子類沒有編寫自己的實(shí)現(xiàn)版本,最終執(zhí)行的就是默認(rèn)的實(shí)現(xiàn);如果子類實(shí)現(xiàn)了自己的版本,調(diào)用的就是子類的版本。(是不是和上節(jié)課的1.5有點(diǎn)親戚關(guān)系?)

class ?AClass
{
???
public :
??????
void ? interface ()
??????
{
?????????printf(
" in?base::interface()\n " );
?????????do_interface();
??????}

???
private :
??????
// the?default?implementation
?????? virtual ? void ?do_interface()
??????
{
?????????printf(
" in?AClass::do_interface()\n " );
??????}

}
;

class ?AClassDerived?:? public ?AClass
{
???
private :
/* ?derived?can?has?its?own?implementation,?but?not?a?must..
??????virtual?void?do_interface()
??????{
?????????printf("in?AClassDerived::do_interface()\n");
??????}
*/

}
;
【給自己的】如果看到這里還會(huì)想:為什么是私有的虛函數(shù)?就搜“與大蝦對(duì)話:領(lǐng)悟設(shè)計(jì)模式”復(fù)習(xí)復(fù)習(xí)……

看了第一種方法的大多數(shù)同學(xué)都會(huì)有這種想法:這不還是要用虛函數(shù)么?穿個(gè)wrapper的馬甲就認(rèn)不出你了?大師馬上說
第二個(gè)替代產(chǎn)品是策略模板(strategy pattern),利用函數(shù)指針實(shí)現(xiàn):

這種方法的實(shí)質(zhì),就是把接口函數(shù)的實(shí)現(xiàn)拿到了類之外。類之中只聲明接口的形式,只定義一個(gè)函數(shù)指針。真正干活的函數(shù)(實(shí)現(xiàn))都不是類的成員。
這樣做帶來了一定的靈活性,具體采用哪種實(shí)現(xiàn)與類的繼承關(guān)系是獨(dú)立無關(guān)聯(lián)的;同時(shí),非類成員函數(shù)也有局限性:無法訪問類的非公有成員。如果把函數(shù)定義為友元或利用公有函數(shù)輸出私有成員,又會(huì)破壞原設(shè)計(jì)的
封裝。如下代碼所示:

class ?AClass
{
???
public :
??????typedef?
void ? * (Interface)( /* param.. */ );
??????
explicit ?AClass(?Interface?pint? = ?defaultInterface)?:?pInterface(pint)
??????
{}
??????
// ..
??? private :
??????Interface?pInterface;
// ..
}
;

在構(gòu)造AClass對(duì)象的時(shí)候即可指定Interface的真身,雖然,它無法直接訪問AClass的非公有成員。

估計(jì)大師也覺得指針在C++里簡(jiǎn)單一些,于是更推崇用C++的庫(如TR1中的function)來管理接口函數(shù)。

原理和函數(shù)指針是一樣的,只不過因?yàn)橛昧藢?duì)象來管理資源,使得應(yīng)用更加靈活。當(dāng)然,要付出更多一點(diǎn)的代碼體積和運(yùn)行時(shí)間代價(jià)。

class ?AClass
{
// ?all?are?the?same?with?the?funtion?pointer?version
// ?except?for:
???typedef?std::tr1::function void ?( /* param.. */ ) > ?Interface;
// ..
}
;

大師在最后才說出了最經(jīng)典的策略模式實(shí)現(xiàn),也是我覺得比較漂亮且容易理解的實(shí)現(xiàn)方式。

用兩個(gè)類搞定:

class ?AInterface
{
???
public :
??????
// ..?
?????? virtual ? void ?DoInterface( /* ?param..? */ );
???
// ..?
};

AInterface?defaultInterface;

class ?AClass
{
???
public :
??????
explicit ?AClass(AInterface? * ?pinter? = ? & defaultInterface)?:?pInter(pinter)
??????{}?
??????
void ?TryInterface()
??????{
?????????pInter
-> DoInterface();
??????}
???
// ..?
??? private :
??????pInterface?
* ?pInter;
???
// ..?
};

看到最后,似乎本課的思想就是用模式設(shè)計(jì)(template pattern或strategy pattern)來代替簡(jiǎn)單的虛函數(shù)設(shè)計(jì)。
但是,大師臨走前又說了:以上只是舉例,為的是說明其實(shí)除了簡(jiǎn)單的虛函數(shù)外,還有很多種可能的方式來替代它完成設(shè)計(jì)需要。

posted on 2010-02-25 23:41 Justin.H 閱讀(530) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Effective C++ 炒冷飯
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            韩日精品在线| 国产精品丝袜久久久久久app| 99在线精品视频| 久久精品亚洲精品国产欧美kt∨| 欧美成人亚洲成人| 亚洲乱码国产乱码精品精| 亚洲人成毛片在线播放女女| 欧美日韩综合在线| 欧美一区二区三区在线观看视频 | 欧美在线播放一区二区| 日韩亚洲精品在线| 久久午夜视频| 久久亚洲精品网站| 国产日韩一区二区三区在线| 亚洲视频中文| 亚洲女女女同性video| 欧美日韩福利| 亚洲人妖在线| 91久久久国产精品| 老色鬼久久亚洲一区二区| 久久精品在线视频| 国产日本欧美在线观看| 99精品视频免费| 国产精品普通话对白| 免费黄网站欧美| 欧美激情精品久久久久久蜜臀| 久久久精品久久久久| 国产精品亚洲综合色区韩国| 亚洲女女做受ⅹxx高潮| 午夜精品国产更新| 国产精品推荐精品| 先锋影院在线亚洲| 久久婷婷激情| 精品不卡一区二区三区| 美女网站在线免费欧美精品| 欧美高清视频| 亚洲美洲欧洲综合国产一区| 欧美激情一区在线观看| 一本一本大道香蕉久在线精品| 在线亚洲高清视频| 国产精品久久久久毛片软件| 亚洲在线中文字幕| 裸体丰满少妇做受久久99精品 | 欧美激情一区二区三区在线| 欧美精品啪啪| 亚洲最黄网站| 欧美一区二区精品在线| 韩国三级在线一区| 久久综合图片| 99国产精品久久久久久久成人热| 国产精品99久久久久久久久久久久| 国产精品电影在线观看| 欧美一区二区福利在线| 米奇777在线欧美播放| 亚洲精品综合| 国产免费亚洲高清| 老司机久久99久久精品播放免费 | 午夜亚洲激情| 伊人久久婷婷色综合98网| 久久国产日韩| 国产乱码精品| 欧美日韩午夜在线视频| 亚洲一区二区三区中文字幕| 国产精品亚洲成人| 麻豆精品网站| 一区二区三区精品视频在线观看| 久久精品国产一区二区三| 亚洲精品一区二区三区婷婷月| 国产精品午夜在线观看| 久久综合电影一区| 亚洲网站啪啪| 免费观看成人鲁鲁鲁鲁鲁视频 | 亚洲高清在线观看| 欧美日韩国产成人高清视频| 久久成人国产| 中文一区在线| 亚洲激情自拍| 快播亚洲色图| 亚洲少妇在线| 亚洲精品极品| 狠狠色狠狠色综合日日91app| 欧美国产专区| 亚洲国产精品悠悠久久琪琪 | 欧美日韩色综合| 新狼窝色av性久久久久久| 亚洲精品自在久久| 欧美大片网址| 久久久久久久网站| 亚洲欧美日韩精品久久奇米色影视| 在线观看日韩一区| 国产伦精品一区二区三区照片91| 欧美日韩免费区域视频在线观看| 久久人人97超碰国产公开结果| 亚洲欧美日韩中文播放| 中日韩在线视频| 99亚洲视频| 亚洲欧洲一区二区在线播放| 欧美成人午夜影院| 欧美.日韩.国产.一区.二区| 久久精品卡一| 久久久久久久999| 久久精品国产91精品亚洲| 午夜精品福利一区二区三区av| 亚洲一区二区三区在线视频| 一区二区三区不卡视频在线观看| 亚洲人成在线观看一区二区| 亚洲肉体裸体xxxx137| 亚洲激情视频在线观看| 亚洲国产老妈| 亚洲人午夜精品免费| 亚洲人成啪啪网站| 亚洲国产裸拍裸体视频在线观看乱了中文 | 99亚洲视频| 亚洲视频www| 中日韩高清电影网| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲青涩在线| 一区二区日韩| 亚欧成人精品| 久久久久久久久久久成人| 久热精品视频在线观看一区| 欧美本精品男人aⅴ天堂| 欧美激情1区2区3区| 欧美三区在线视频| 国产精品高精视频免费| 国产人成一区二区三区影院| 黄色成人精品网站| 亚洲国产一区二区三区a毛片 | 亚洲午夜一区二区三区| 午夜精品久久久久久久男人的天堂 | 欧美日韩性视频在线| 国产精品欧美经典| 国语自产精品视频在线看8查询8| 亚洲电影免费| 亚洲视频www| 久久国产精品亚洲va麻豆| 免费观看国产成人| 日韩视频国产视频| 欧美在线视频免费观看| 欧美插天视频在线播放| 欧美性猛交一区二区三区精品| 欧美天堂亚洲电影院在线播放| 国产亚洲一区二区三区在线播放 | 久久精品亚洲一区二区| 美女视频黄 久久| 99国产精品国产精品毛片| 久久成人精品| 欧美日韩免费高清一区色橹橹| 国产综合自拍| 在线视频精品一| 麻豆精品一区二区综合av| 在线综合+亚洲+欧美中文字幕| 久久久久国产精品www| 欧美性久久久| 亚洲国产天堂久久国产91| 亚洲男女自偷自拍图片另类| 欧美成人a∨高清免费观看| 在线一区欧美| 欧美激情久久久久| 一区二区三区在线高清| 亚洲欧美国产视频| 91久久夜色精品国产九色| 欧美一区二区在线免费播放| 欧美日韩国产综合网| 亚洲高清中文字幕| 久久精品国产久精国产爱| av不卡免费看| 欧美精品一区二| 亚洲激情av| 久久婷婷麻豆| 欧美在线免费观看| 国产精品日本一区二区| aa级大片欧美三级| 欧美国产视频在线| 久久久国产精品一区二区中文| 国产精品色网| 一区二区激情小说| 亚洲电影天堂av| 玖玖在线精品| 黄色亚洲免费| 久久蜜臀精品av| 久久av老司机精品网站导航| 国产精品自拍一区| 午夜激情综合网| 在线视频欧美日韩| 国产精品海角社区在线观看| 在线一区二区三区四区五区| 91久久精品国产91久久性色tv| 久久综合给合久久狠狠狠97色69| 禁久久精品乱码| 久久久一区二区| 久久精品国产亚洲5555| 国内激情久久| 看欧美日韩国产| 蜜臀av国产精品久久久久| 亚洲精品乱码久久久久久蜜桃麻豆| 免费不卡在线观看| 美女诱惑一区| 99国产精品99久久久久久粉嫩| 亚洲国产欧美在线|