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

            Zero Lee的專(zhuān)欄

            關(guān)于C++中一些基本設(shè)計(jì)規(guī)則和指導(dǎo)方針

            ???C++是一種大型語(yǔ)言,為更大的設(shè)計(jì)空間開(kāi)辟了道路。這里提供一些基本設(shè)計(jì)規(guī)則和指導(dǎo)方針,它們被證明是非常有用的。
            ???主要設(shè)計(jì)規(guī)則被認(rèn)為是絕對(duì)不能違反的。甚至偶爾的違反也可能危及大型系統(tǒng)的完整性。
            ???次要設(shè)計(jì)規(guī)則也被認(rèn)為是遵守的,但也許不必嚴(yán)格地遵守。在一個(gè)隔離的實(shí)例中違反一個(gè)次要規(guī)則不大可能產(chǎn)生嚴(yán)重的全局性影響。
            ???指導(dǎo)方針是作為經(jīng)驗(yàn)法則提出來(lái)的,因此必須遵守,除非有強(qiáng)制性的工程方面的原因要求遵守別的原則。

            ???把一個(gè)類(lèi)的數(shù)據(jù)成員暴露給其客戶(hù)程序違反了封裝原則。提供對(duì)數(shù)據(jù)成員的非私有訪問(wèn)意味著表示上的局部改變可能迫使客戶(hù)重新編寫(xiě)代碼。此外,由于允許對(duì)數(shù)據(jù)成員進(jìn)行可寫(xiě)訪問(wèn),無(wú)法阻止偶爾誤用導(dǎo)致數(shù)據(jù)處在不一致的狀態(tài)。保護(hù)的成員數(shù)據(jù)像公共成員數(shù)據(jù)一樣,無(wú)法限制 因數(shù)據(jù)改變而可能影響到的客戶(hù)的數(shù)量。

            ???全局變量會(huì)污染全局名稱(chēng)空間,而且會(huì)歪曲設(shè)計(jì)的物理結(jié)構(gòu),使得實(shí)際上不可能進(jìn)行獨(dú)立的測(cè)試和有選擇的重用。在新的C++項(xiàng)目中沒(méi)有必要使用全局變量。我們可以通過(guò)將變量放置在一個(gè)類(lèi)的作用域中作為私有靜態(tài)成員、并提供公共靜態(tài)成員函數(shù)訪問(wèn)它們的方法來(lái)系統(tǒng)消除全部變量。但是,對(duì)這種模塊的過(guò)度依賴(lài)是一種不良設(shè)計(jì)的癥狀。

            ???自由函數(shù),特別是那些不在任何用戶(hù)自定義類(lèi)型上操作的函數(shù),在系統(tǒng)集成時(shí)很可能與別的函數(shù)沖突。將這樣的函數(shù)嵌套在類(lèi)作用域中作為靜態(tài)成員基本上可以消除沖突的危險(xiǎn)。

            ???枚舉類(lèi)型、typedef以及常量數(shù)據(jù)也可能威脅全局名稱(chēng)空間。通過(guò)將枚舉類(lèi)型嵌套在類(lèi)作用域中,任何二義性都可以通過(guò)作用域解析來(lái)消除。一個(gè)在文件作用域中的typedef看起來(lái)有點(diǎn)像類(lèi),但是在大型項(xiàng)目中急難發(fā)現(xiàn)。通過(guò)將typedef嵌套在類(lèi)作用域中,他們就變的相對(duì)容易追蹤。一個(gè)在頭文件中定義的整數(shù)常量,其最好的表達(dá)方式通常是通過(guò)在類(lèi)作用域中的一個(gè)枚舉值來(lái)表達(dá)。其它常量類(lèi)型可以通過(guò)使它們成為某個(gè)類(lèi)的靜態(tài)常量成員來(lái)限定其范圍。

            ???預(yù)處理宏對(duì)于人和機(jī)器來(lái)說(shuō)都難以理解。由于宏不是C++的一部分,所以宏不遵守作用域約束,并且,如果將宏放置在一個(gè)頭文件中,宏可能與系統(tǒng)中的任何文件的任何標(biāo)識(shí)符沖突。因此,宏不應(yīng)該出現(xiàn)在頭文件中,除非是作為包含衛(wèi)哨。

            ???總的看來(lái),我們應(yīng)該避免在一個(gè)頭文件的文件作用域中引入除了類(lèi)、結(jié)構(gòu)、聯(lián)合和自由運(yùn)算符之外的任何東西。當(dāng)然,我們?cè)试S在頭文件中定義內(nèi)聯(lián)成員函數(shù)。

            ???一個(gè)定義被包含兩次會(huì)引起編譯時(shí)錯(cuò)誤。因?yàn)榇蠖鄶?shù)C++頭文件包含定義,我們有必要防止再收斂包含圖的可能性。在一個(gè)頭文件中,用內(nèi)部包含衛(wèi)哨圍繞定義可以確保每個(gè)頭文件的內(nèi)容在任何一個(gè)編譯單元中最多被加入一次。

            ???冗余(外部)包含衛(wèi)哨雖然不是一定必需的,但是它可以確保我們避免編譯時(shí)的二義包含行為。通過(guò)用冗余衛(wèi)哨圍繞頭文件的包含指令,我們可以確保每個(gè)編譯單元最多兩次打開(kāi)一個(gè)頭文件。

            ???良好的文檔是軟件開(kāi)發(fā)必不可少的一部分。缺少文檔將降低可用性。文檔的一個(gè)重要部分是聲明什么是沒(méi)有定義的。否則,客戶(hù)可能會(huì)依賴(lài)巧合的行為,這種行為只能來(lái)自特定的實(shí)現(xiàn)選擇。
            ???

            posted on 2007-01-14 15:45 Zero Lee 閱讀(504) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): CC++ Programming

            欧美精品一区二区久久| 日韩久久久久久中文人妻 | 色8激情欧美成人久久综合电| 精品久久久久久久久中文字幕| 国产成人久久激情91| 国产精品嫩草影院久久| 久久经典免费视频| 久久香蕉超碰97国产精品| 久久精品成人免费网站| 亚洲中文字幕伊人久久无码| 久久人妻少妇嫩草AV无码专区| 国产精品午夜久久| 久久精品国产久精国产果冻传媒 | 国产亚洲精久久久久久无码 | 久久青青草视频| 97久久超碰成人精品网站| 国产精品无码久久久久| 久久精品亚洲日本波多野结衣| 国产真实乱对白精彩久久| 久久午夜免费视频| 国产精品久久久久久久午夜片| 久久无码人妻一区二区三区午夜| 久久久久久亚洲精品不卡| 精品乱码久久久久久久| 久久久噜噜噜久久中文字幕色伊伊| 久久se精品一区精品二区| 狠狠色婷婷久久一区二区| 久久久精品国产亚洲成人满18免费网站| 日韩人妻无码一区二区三区久久99 | 久久美女网站免费| 亚洲AV乱码久久精品蜜桃| 怡红院日本一道日本久久 | 亚洲а∨天堂久久精品9966| 久久精品国产99久久无毒不卡| 无码人妻久久一区二区三区蜜桃| 国产日韩欧美久久| 久久婷婷国产麻豆91天堂| 久久久久亚洲AV成人片| 久久天天躁狠狠躁夜夜avapp| 久久精品国产99久久久古代| 麻豆久久久9性大片|