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

洛譯小筑

別來無恙,我的老友…
隨筆 - 45, 文章 - 0, 評論 - 172, 引用 - 0
數據加載中……

[ECPP讀書筆記 條目19] 要像設計類型一樣設計class

與其它的面向對象編程語言類似,在C++中,定義一個新的class即定義了一個新的類型。一個C++開發者的職業生涯的大多數時間都將用在“不斷豐富充實他們的類型系統”上。這意味著他不僅僅是一個class的設計者,更是一個類型的設計者。函數和運算符重載、內存的分配和釋放控制、對象初始化和終止定義——一切都由設計人員手工完成。我們知道,語言設計人員在設計內建數據類型時傾注了大量心血,而一個class設計人員也要花費同樣的精力。

能否設計出優秀的class對于設計人員來說是一項嚴峻的考驗,因為設計出好的數據類型本身就是一項艱巨的任務。優秀的類型擁有自然的語法、直觀的語義,并且還有一套或多套高效的實現。在C++中,如果定義class的工作做得一團糟,那么期望達到上面的目標就是天方夜譚。甚至class的成員函數的聲明方式也會影響到它的性能。

那么,如何把class設計得更高效呢?首先,你必須要了解你所面對的問題。幾乎所有的class設計都將面對下面的問題,它們的答案可以對設計起到一定的約束作用:

新類型的對象應如何創建和刪除?class中與之相關的函數包括:構造函數和析構函數,以及class中其它的內存分配和釋放函數(operator newoperator new[]operator deleteoperator delete[],參見第八章)。如果你自己手動編寫它們,這個問題的解決方式將會影響到這些函數。

對象初始化與對象賦值有怎樣的不同?這個問題的答案決定著構造函數與賦值運算符之間的區別。不要混淆初始化和賦值的概念,這一點很重要,因為二者所面對的函數調用類型是不同的。

新類型在通過傳值方式傳遞對象時意味著什么?請牢記,一個類型是通過拷貝構造函數來定義傳值操作的實現方式的。

新類型對合法數值有哪些限制?通常情況下,對于某個class的數據成員而言,只有一些特定的數值組合是合法的。這些組合決定了class應遵循哪些定律。而這些定律又決定了在數據成員中你應該進行哪些錯誤檢查,尤其是構造函數、賦值運算符、以及“設定”函數(即setter)。它們還會影響到函數會拋出什么樣的異常,同時在某些情況下還有可能影響到函數所拋出異常的細節。

新類型是否適用于繼承?如果新的class由現有的class繼承而來,那么新的class應遵循現有class(即父類)設計方案的限制。尤其是要確定父類的成員函數是否為虛函數(參見條目34和36)。如果期望讓其它的class可以繼承當前的class,就需要考慮當前class的成員函數是否應為虛函數,尤其是它的析構函數(參見條目7)。

新類型允許進行哪些類型轉換?新的類型存在于各式各樣的類型之間,那么是否應該提供新類型與其它類型的類型轉換功能呢?如果你期望讓T1的一個對象將類型隱式轉換為T2。可以通過在T1類中放置一個類型轉換函數(比如operator T2),或者在T2類中放置一個有單一參數的非explicit構造函數。如果你期望T1僅允許顯式類型轉換,就需要編寫函數來執行這一轉換,但是這一函數不應是類型轉換運算符,也不應是單一參數的非explicit構造函數。(條目15中有隱式/顯式轉換函數的示例。)

哪些運算符和函數對新類型是有意義的?這個問題的答案取決于你會為你的class聲明哪些函數。一些函數將成為成員函數,另一些則不是(參見條目23、24、46)。

應明確拒絕哪些標準函數?通過將它們聲明為private的可達到這一目的(參見條目6)。

誰可以訪問新類型中的數據成員?這一問題可以幫助我們確定哪些成員應為public的,哪些是protected的,以及哪些是private的。同時,也可以幫助我們確定哪些class和/或函數應該是友元,還有嵌套的class是否有意義。

新類型中有哪些“未聲明的接口”?如果你充分考慮了新類型中性能、異常安全(參見條目29)、資源使用(比如互斥鎖、動態內存)等問題,系統將許諾給你什么呢?我們說你在這些領域所作出的努力,將確保你的class的實現中相應的約束條件能夠得以嚴格實施。

新類型有多通用?可能你想做的并不僅僅是定義一個新類型。而是定義一族新類型。如果真是這樣,需要你定義的就不是一個新的class了,你需要定義一個新的類模板(class template)。

你真的需要一個新類型嗎?如果你創建新的派生類僅僅為了為現有的類添加新的功能,那么通過簡單地定義一個或多個非成員函數或者模板可能會更好的達到目標。

完整地回答以上的問題列表并不是一件簡單的事情,因此定義高效的class就是一項嚴峻的挑戰。然而,如果成功完成了這一挑戰,那么由用戶自定義的class生成的類型至少可以像內建數據類型一樣好用。一切都是值得的。

時刻牢記

class設計就是類型的設計。在定義一個新的類型之前,要確保將本條目討論的所有問題考慮周全。

posted on 2007-05-20 23:30 ★ROY★ 閱讀(944) 評論(2)  編輯 收藏 引用 所屬分類: Effective C++

評論

# re: 【翻譯】[Effective C++第三版?中文版][第19條]要像設計類型一樣設計class  回復  更多評論   

好久不見更新了。。。
2007-05-30 14:27 | sniffer

# re: 【翻譯】[Effective C++第三版?中文版][第19條]要像設計類型一樣設計class  回復  更多評論   

@sniffer
這幾個原因:
1、有個哥們結婚去赴宴了,在他家住了兩天;
2、要考試了,去駕校學車時間有點兒緊;
3、這幾天老犯困,狀態不好
4、自個兒懶(其實這條才是最重要的:)。

我才發現自己已經退化成了一個無法用筆來記錄自己感受的人。有時候走在街上,躺在床上,腦袋里有千頭萬緒都能寫成一本書,但拿起筆來總是欲哭無淚。還好有歌聲陪伴,翻出若干年前聽的老歌,仿佛才能回到那個時代,回憶起那時候的事情來,或是幸福、或是苦澀、也可能是平淡無奇。
2007-06-01 18:19 | ★ROY★
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲国产综合91精品麻豆| 一区二区电影免费在线观看| 欧美一区三区二区在线观看| 亚洲午夜av电影| 国产精品夜夜夜一区二区三区尤| 日韩亚洲欧美精品| 99综合精品| 国产综合激情| 欧美国产日本韩| 欧美日韩亚洲一区二区| 亚洲女同精品视频| 欧美影院午夜播放| 亚洲国产经典视频| 亚洲素人在线| 激情综合在线| 99re6这里只有精品| 国产婷婷97碰碰久久人人蜜臀| 美女精品自拍一二三四| 欧美啪啪一区| 久久精品五月| 欧美久久九九| 久久另类ts人妖一区二区| 欧美二区在线| 久久精品国产第一区二区三区最新章节| 久久精品首页| 亚洲欧美日韩专区| 老司机午夜精品视频| 亚洲男人的天堂在线观看| 久久香蕉精品| 欧美诱惑福利视频| 欧美啪啪一区| 免费观看30秒视频久久| 国产精品久久久爽爽爽麻豆色哟哟| 男女精品视频| 国产午夜精品一区二区三区欧美 | 亚洲精品一区二| 黄色亚洲网站| 亚洲制服丝袜在线| 夜夜夜精品看看| 鲁大师影院一区二区三区| 久久成人人人人精品欧| 亚洲久久一区| 亚洲国产精品ⅴa在线观看| 亚洲欧美成人一区二区在线电影| 99re这里只有精品6| 久久综合中文| 蜜臀a∨国产成人精品| 国产视频久久网| 亚洲视频1区2区| 中文亚洲免费| 欧美另类一区| 亚洲七七久久综合桃花剧情介绍| 一色屋精品亚洲香蕉网站| 午夜视频在线观看一区二区三区| 亚洲色诱最新| 欧美偷拍一区二区| 99国产精品99久久久久久| 99国内精品久久久久久久软件| 鲁大师影院一区二区三区| 蜜桃伊人久久| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美激情按摩| 亚洲黄色片网站| 久久中文字幕一区二区三区| 久久综合精品一区| 精品成人乱色一区二区| 久久精品欧美日韩| 媚黑女一区二区| 亚洲国内欧美| 欧美日韩国产在线观看| 一区二区免费在线视频| 亚洲淫片在线视频| 国产欧美日韩亚洲| 久久久久久电影| 亚洲第一福利在线观看| 日韩视频一区二区三区| 欧美久久久久中文字幕| 一本色道久久88精品综合| 亚洲欧美国产三级| 国产在线拍揄自揄视频不卡99| 久久精品国产欧美亚洲人人爽| 噜噜噜91成人网| 亚洲免费观看高清完整版在线观看| 欧美精品一卡二卡| 亚洲欧美激情诱惑| 欧美成人免费在线| 一区二区三区国产盗摄| 国产精品主播| 媚黑女一区二区| 亚洲特级毛片| 欧美不卡在线视频| 亚洲午夜一二三区视频| 国产婷婷97碰碰久久人人蜜臀| 美日韩在线观看| 亚洲素人在线| 亚洲国产成人久久综合| 欧美诱惑福利视频| 亚洲美洲欧洲综合国产一区| 国产欧美日韩亚州综合| 欧美大色视频| 久久av在线看| 一本色道久久综合亚洲精品按摩| 久久久久成人精品| 亚洲天堂网在线观看| 久久精品欧洲| 亚洲一区三区视频在线观看 | 宅男66日本亚洲欧美视频| 国产综合色在线| 欧美日韩一区三区四区| 久久人人超碰| 亚洲欧美日本日韩| 亚洲精品一区二区三| 免费视频一区二区三区在线观看| 亚洲欧美精品在线观看| 日韩视频在线一区| 一区二区三区我不卡| 国产精品久久午夜| 欧美久久久久中文字幕| 久热精品视频在线观看一区| 午夜国产一区| 亚洲午夜一级| 最新亚洲电影| 亚洲国产精品女人久久久| 久久天天狠狠| 久久久久se| 欧美中文字幕在线观看| 亚洲女女做受ⅹxx高潮| 中文在线一区| 一区二区三区www| 亚洲美女区一区| 91久久久亚洲精品| 亚洲国产日韩欧美| 亚洲国产一二三| 亚洲国产精品一区二区www| 黄色工厂这里只有精品| 国产真实乱偷精品视频免| 国产美女一区二区| 国产视频一区在线观看一区免费| 国产老肥熟一区二区三区| 国产精品进线69影院| 欧美日韩综合在线免费观看| 欧美日韩国产综合久久| 欧美日韩午夜在线| 欧美性片在线观看| 国产精品高精视频免费| 国产精品日本欧美一区二区三区| 国产精品久久久爽爽爽麻豆色哟哟| 国产精品国产福利国产秒拍| 国产精品久久久久久久浪潮网站| 国产精品福利在线观看网址| 国产精品青草久久| 国产视频一区三区| 在线日韩成人| 日韩亚洲欧美成人| 亚洲欧美国产日韩天堂区| 久久国产精品黑丝| 欧美成人免费小视频| 亚洲九九精品| 亚洲欧美日韩专区| 久久婷婷久久一区二区三区| 欧美 日韩 国产 一区| 欧美日本在线观看| 国产日韩1区| 亚洲青色在线| 午夜精品福利视频| 免费看av成人| 一本一本久久a久久精品综合妖精| 亚洲自拍三区| 蜜臀久久久99精品久久久久久| 欧美日韩在线播放一区| 国产亚洲成年网址在线观看| 亚洲黄一区二区| 亚洲免费在线观看| 欧美成人在线影院| 亚洲天堂免费观看| 免费精品99久久国产综合精品| 欧美日韩喷水| 在线播放豆国产99亚洲| 亚洲一区二区在线观看视频| 老司机精品视频网站| 99精品免费网| 美女被久久久| 国产日韩视频| 亚洲婷婷免费| 亚洲国产91| 欧美一区视频| 亚洲一区国产| 欧美精品在线一区| 一区二区自拍| 午夜精品久久久久久久99水蜜桃 | 欧美亚洲一级片| 亚洲精品1234| 久久综合伊人77777蜜臀| 国产精品日韩欧美一区二区三区 | 在线观看视频一区二区| 午夜精品视频| 99视频+国产日韩欧美| 免费人成网站在线观看欧美高清| 国产亚洲欧美日韩精品| 亚洲影音一区|