• <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>
            春暖花開
            雪化了,花開了,春天來了
            posts - 149,comments - 125,trackbacks - 0

            去同學那玩,看到這么一本書《C++沉思錄》。這本書很早聽過,但是沒有讀過。于是捧起書讀了幾章,感覺很是不錯。其中第四章就是講“類設計者的核查表”。雖然用c++有幾年,但是有一些東西還是需要銘記于心的。

             

            類設計者的核查表

            一、        您的類需要一個構造函數么?

            有些類太簡單,無需構造函數,但有些類太復雜,他們需要構造函數來隱藏它們的內部工作方式。

            二、           您的數據成員是私有的么?

            通常使用公有的數據成員不是什么好事,因為類設計者無法控制何時訪問這些成員。

            三、           您的類需要一個無參的構造函數么?

            如果一個類已經有了構造函數,想聲明該類的對象可以不必顯示地初始化它們,則必須顯示地寫一個無參的構造函數。

            四、           是不是每一個構造函數初始化所有的數據成員?

            構造函數的用途就是用一種明確定義的狀態來設置對象。對象的狀態由對象的數據成員進行反映。每個構造函數都要負責為所有的數據成員設置經過明確定義的值。

            有時這種說法也未必總是正確的。有時,類會有一些數據成員,它們只在它們的對象存在了一定時間之后才有意義。提這個問題,只是激勵你進行思考。

            五、           類需要構造函數么?

            不是所有有構造函數的類都需要構造函數。如果深入考慮一個類要做些什么,那么該類是否需要析構函數的問題就十分明顯了。應該問一問該類是否分配了資源,而這些資源又不會有成員函數自動釋放,這就足夠了。特別是那些構造函數里包含了new表達式的類,通常要在析構函數中加上相應的delete表達式,所以需要一個虛析構函數。

            六、        類需要一個虛析構函數么?

            有些類需要虛析構函數只是為了聲明他們的析構函數是虛的。當然,決不會用做基類的類是不需要虛析構函數的:任何虛函數只在繼承的情況下才有用。

            虛析構函數通常是空的。

            七、           你的類需要復制構造函數么?

            很多時候答案都是“不”,但是有時候答案是“是”。關鍵在于復制該類對象是否就相當于復制其數據成員和基類對象。如果并不相當,就需要復制構造函數。

            如果你的類在構造函數內分配資源,則可能需要一個顯示的復制構造函數來管理資源。有析構函數的類通常是析構函數來釋放構造函數分配的資源,這通常說明需要一個復制構造函數。(空的虛析構函數除外)

            如果不想用戶能夠復制該類的對象,就聲明復制構造函數為私有的。如果其他的成員不會使用這些成員函數,聲明就足夠了,沒有必要定義它們。

            八、           你的類需要一個賦值操作么?

            如果需要復制構造函數,同理多半也會需要一個賦值操作。

            九、           你的賦值操作符能正確地將對象賦給對象本身么?

            賦值總是用新值取代目標對象的舊值。如果原對象和目標對象是同一個,而我們又奉行“先釋放舊值,再復制”的行事規程,那么就可能在還沒有實施復制之前就把原對象銷毀了。

            十、           你的類需要定義關系操作符么?

            如果你的類邏輯上支持相等操作,那么提供operate== operate!=可能會有好處。類似的,如果你的類的值有某種排序關系,那就可能會想提供余下的關系操作符。只要它們想創建你的類型的有序集合,你就必須提供關系操作符。

            十一  刪除數組時你記住了用delete[]么?

            這個形式的存在,是C++希望在保持與C的兼容性的同時關注效率。C++要求用戶告知要被刪除的是不是數組。如果是,該實現就可能會提供另一個地方來存儲長度,因為與數組所需的內存量相比,這個常數的開銷會小很多。

            十二   記得在復制構造函數和賦值操作符的參數類型中加上了const么?

            復制構造函數應該是像X::X(const X&)這樣,畢竟復制對象不會改變原對象。實際上,由于綁定一個非const引用到一個臨時對象是非法的,使用X::X(X&)作為復制構造函數不會允許復制任何特殊表達式的結果。同樣道理適用于賦值。

            十三   如果函數有引用參數,它們應該是const引用么?

            只有當函數想改變參數時,它才應該有不用const聲明的引用參數。

             

               其中很多作者提到,提這些問題并不是希望去尋求答案,只是希望能夠激勵你進行思考。所以當我們設計一個類的時候,多思考一下,有沒有什么地方需要注意的,我們設計的類將會更合理,更健壯一些。
            posted on 2009-07-25 08:32 Sandy 閱讀(302) 評論(0)  編輯 收藏 引用 所屬分類: c++學習
            香蕉aa三级久久毛片| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 亚洲欧美日韩中文久久| 亚洲国产欧美国产综合久久| 久久久久亚洲AV片无码下载蜜桃| 国产精品无码久久综合 | 国产精品热久久毛片| 一本一道久久a久久精品综合 | 久久av免费天堂小草播放| 久久久精品久久久久影院| 久久99国产精品一区二区| 久久精品国产2020| 日韩欧美亚洲综合久久影院d3| 亚洲欧洲中文日韩久久AV乱码| 久久亚洲国产成人精品性色| 久久无码人妻精品一区二区三区| 色综合久久无码中文字幕| 欧美性大战久久久久久| 久久精品国产乱子伦| 亚洲狠狠综合久久| 亚洲精品国产美女久久久| 久久人人超碰精品CAOPOREN| 久久精品黄AA片一区二区三区| 波多野结衣中文字幕久久| 国产精品亚洲综合久久| 国内精品久久久久久麻豆| 久久精品人人做人人爽电影蜜月 | 久久久久国产精品嫩草影院| 亚洲天堂久久精品| 日本精品久久久久中文字幕8 | 精品熟女少妇av免费久久| A级毛片无码久久精品免费| 久久精品国产亚洲一区二区三区 | 91亚洲国产成人久久精品| 久久这里只有精品18| 久久久国产乱子伦精品作者| 亚洲愉拍99热成人精品热久久| 久久久精品久久久久影院| 久久久国产精华液| 色综合久久中文字幕无码| 久久综合香蕉国产蜜臀AV|