effectivec++學(xué)習(xí)筆記-創(chuàng)新互聯(lián)

--------------------1讓自己習(xí)慣c++-----------------------------------------

懷柔網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,懷柔網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為懷柔上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的懷柔做網(wǎng)站的公司定做!

Rule 1 : 把c++看做一個語言聯(lián)邦,共有4個次語言:c(區(qū)塊、語句、預(yù)處理器、內(nèi)置數(shù)據(jù)類型、數(shù)組、指針);面向?qū)ο骳++(類、封裝、繼承、多態(tài)、虛函數(shù));模板c++;STL(容器、迭代器、算法以及函數(shù)對象)。當(dāng)你從某個次語言切換到另一個,導(dǎo)致高效編程守則要求你改變策略時(shí),不要感到驚訝。

Rule 2:盡量以const、enum、inline替換#define,盡量以編譯器代替預(yù)處理器。

Rule 3: 盡可能使用const。const最具微力的應(yīng)用是面對函數(shù)聲明時(shí)的應(yīng)用:函數(shù)返回值,各參數(shù),成員函數(shù)自身。

Rule 4:確定對象被使用前已先被初始化。需要關(guān)注三方面的問題:1.對內(nèi)置類型意外的任何其他東西,確保每一個構(gòu)造函數(shù)都將對象每一個成員初始化。2.構(gòu)造函數(shù)的初值列列出的成員變量,其排列次序應(yīng)該和他們在class中的聲明次序相同。3.定義于不同編譯單元的non-local static對象的初始化次序是不確定的。解決方法:將每個non-local static對象搬到自己的專屬函數(shù)內(nèi)(該對象在此函數(shù)內(nèi)被聲明為static)

-------------------2構(gòu)造/析構(gòu)/賦值運(yùn)算 ----------------------------------------

Rule 5:了解c++默默編寫并調(diào)用了這些函數(shù)(都是public且inline):默認(rèn)構(gòu)造函數(shù),默認(rèn)析構(gòu)函數(shù),復(fù)制構(gòu)造函數(shù),復(fù)制賦值操作符函數(shù)。

Rule 6:若不想使用編譯器自動生成的函數(shù),就該明確拒絕。例如若不想類被復(fù)制或者賦值,就該明確拒絕,這有兩個方法。

Rule 7:為多態(tài)基類聲明virtual析構(gòu)函數(shù)。

Rule 8:讓異常逃離析構(gòu)函數(shù)。析構(gòu)函數(shù)絕對不要吐出異常,這會導(dǎo)致程序可能過早結(jié)束或出現(xiàn)不明確的行為。如果一個被析構(gòu)函數(shù)調(diào)用的函數(shù)可能拋出異常,析構(gòu)函數(shù)應(yīng)該捕捉任何異常,然后吞下它們(不傳播)或結(jié)束程序。

Rule 9:絕不在構(gòu)造和析構(gòu)過程中調(diào)用虛函數(shù),這類調(diào)用從不下降至派生類。解決辦法是令派生類將必要的構(gòu)造信息向上傳遞至base class構(gòu)造函數(shù)。令函數(shù)為static,也就不可能意外指向“初期未成熟之對象內(nèi)尚未初始化的成員變量”。

Rule 10:令operator = 返回一個referenceto *this。

Rule 11:在operator = 中處理“自我賦值”。

Rule 12:復(fù)制對象時(shí)勿忘其每一個成分。

---------------------3資源管理---------------------------------------------------------

Rule 13:以對象管理資源。令資源在構(gòu)造期間獲得,在析構(gòu)期間釋放。

Rule 14:在資源管理類中小心copying行為。當(dāng)一個RAII對象被復(fù)制,會有以下2種處理方式:1.禁止復(fù)制,2.對底層資源祭出“引用計(jì)數(shù)法”:通常只要內(nèi)含一個tr1:shared_ptr成員變量,RAIIclasses便可實(shí)現(xiàn)出引用計(jì)數(shù)的復(fù)制行為。

Rule 15:在資源管理類中提供對原始資源的訪問。

Rule 16:成對使用new和delete時(shí)要采用相同的形式。

Rule 17:以獨(dú)立語句將newed對象置入智能指針,否則可能導(dǎo)致資源泄露,應(yīng)該將以下語句:

processWidget(std::tr1::shared_prt<Widget>(newWidget),priority());

替換為(獨(dú)立語句)

std::tr1::shared_ptr<Widget>pw(new Widget);

processWidget(pw,priority());

----------------------------4設(shè)計(jì)與聲明-------------------------------------------------------

Rule 18:讓接口容易被正確使用,不易被誤會。

Rule 19:設(shè)計(jì)class猶如設(shè)計(jì)type。應(yīng)該和“語言設(shè)計(jì)者當(dāng)初設(shè)計(jì)語言內(nèi)置類型時(shí)”一樣謹(jǐn)慎地來研討class的設(shè)計(jì)。

Rule 20:盡量以pass-by-reference-to-const替換pass-by-value,但對內(nèi)置類型,pass-by-value往往比較適當(dāng)。

Rule 21:必須返回對象時(shí),別妄想返回其reference。

Rule 22:將成員變量聲明為private。

Rule 23:寧以non-member、non-friend替換member函數(shù)。

Rule 24:如果需要為某個函數(shù)的所有參數(shù)(包括被this指針?biāo)傅哪莻€隱喻參數(shù))進(jìn)行類型轉(zhuǎn)換,那個這個函數(shù)必須是個non-member。

Rule 25:考慮寫出一個不拋出異常的swap函數(shù)。

----------------------------------------5實(shí)現(xiàn)------------------------------------------------------

Rule 26:盡可能延后變量定義式的出現(xiàn)時(shí)間,這樣可以避免構(gòu)造(和析構(gòu))非必要對象。

Rule 27:盡量少做轉(zhuǎn)型動作。C++的集中轉(zhuǎn)型類型:

const_cast<T>(expression) //唯一可將對象的常量性移除。

dynamic_cast<T>(expression) //安全向下轉(zhuǎn)型

reinterpret_case<T>(expression) //執(zhí)行低級轉(zhuǎn)型

static_cast<T>(expression) //強(qiáng)迫隱式轉(zhuǎn)換,例如non-const對象轉(zhuǎn)為const對象,或?qū)nt轉(zhuǎn)為double等等。

Rule 28:避免返回handles指向?qū)ο髢?nèi)部成分,這樣會破壞封裝性和const性。

應(yīng)該將

Point& upperLeft() const {returnpData->ulhc;}

替換為

const Point& upperLeft() const {returnpData->ulhc;}

Rule 29:為“異常安全”而努力使值得的。

Rule 30:透徹了解inlining。一開始不要將任何函數(shù)聲明為inline,或至少將inlining施行范圍局限在那些“一定成為inline”或“十分平淡無奇”的函數(shù)身上。

Rule 31:將文件間的編譯依存關(guān)系降至最低,將接口與實(shí)現(xiàn)分離。一般構(gòu)想是相依于聲明式,不要相依于定義式。基于此構(gòu)想的2個手段是handle classes和interface classes。

--------------------------6繼承與面向?qū)ο笤O(shè)計(jì)---------------------------------

Rule 32:確定你的public繼續(xù)塑模出is-a關(guān)系。

類之間的三種關(guān)系:is-a,has-a,is-implemented-in-terms-of(根據(jù)某物實(shí)現(xiàn)出)

Rule 33:避免遮掩繼承而來的名稱。

如果你繼承base class并加上重載函數(shù),而你又希望重新定義或覆寫其中一部分,那么你必須為那些原本會被遮掩的每個名稱引入一個using聲明式,否則某些你希望繼承的名稱會被遮掩。

當(dāng)你不想繼承base class的所有函數(shù),可以使用private繼承和轉(zhuǎn)交函數(shù)(什么是轉(zhuǎn)交函數(shù)?調(diào)用基類函數(shù)的函數(shù))。

Rule 34:區(qū)分接口繼承和實(shí)現(xiàn)繼承。

Rule 35:考慮virtual函數(shù)以外的其他選擇。

藉由non-vitualinterface手法實(shí)現(xiàn)template method模式:虛函數(shù)應(yīng)該幾乎總是private,令客戶通過public non-virtual成員函數(shù)間接調(diào)用private virtual函數(shù)。

藉由函數(shù)指針實(shí)現(xiàn)策略模式。

Rule 36:絕不重新定義繼承而來的non-virtual函數(shù)。

Rule 37:絕不重新定義繼承而來的缺省(默認(rèn))的參數(shù)值。

Rule 38:通過復(fù)合塑模出has-a或“根據(jù)某物實(shí)現(xiàn)出”。

Rule 39:明智而審慎地使用private繼承。如果class D以private形式繼承class B,則用意是為了采用classB內(nèi)已經(jīng)備妥的某些特性。

Rule 40:明智而審慎地使用多重繼承。

-----------------------7模板與泛型編程-------------------------------------------------------------------

Rule 41:了解隱式接口和編譯期多態(tài)。

classes和templates都支持接口和多態(tài)。

對classes而言,接口是顯式的,以函數(shù)簽名為中心,多態(tài)則通過virtual函數(shù)發(fā)生于運(yùn)行期。

對template參數(shù)而言,接口是隱式的,奠基于有效表達(dá)式(如if語句內(nèi)的表達(dá)式),多態(tài)則是通過template具現(xiàn)化和函數(shù)重載解析發(fā)生于編譯期。

Rule 42:了解typename的雙重意義。

Rule 43:學(xué)習(xí)怎么獲得基類模板中的名稱。

Rule 44:將與參數(shù)無關(guān)的代碼抽離templates。

Rule 45:運(yùn)用成員函數(shù)模板接受所有兼容類型。

Rule 46:需要類型轉(zhuǎn)換時(shí)請為模板定義非成員函數(shù)。

Rule 47:請使用traitsclasses表現(xiàn)類型信息。

Rule 48:認(rèn)識templates元編程。

------------------------8定制new和delete------------------------------------------------------------------------

Rule 49:了解new-handler的行為。

Rule 50:了解new和delete的合理替換時(shí)機(jī)。

Rule 51:編寫new和delete時(shí)需固守常規(guī)。

Rule 52:寫了placementnew也要寫placement delete。

------------------------------------9雜項(xiàng)討論----------------------------------------------------------------------------

Rule 53:不要輕忽編譯器的警告。

Rule 54:讓自己熟悉包括tr1在內(nèi)的標(biāo)準(zhǔn)程序庫。

Rule 55:讓自己熟悉boost。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享名稱:effectivec++學(xué)習(xí)筆記-創(chuàng)新互聯(lián)
瀏覽路徑:http://muchs.cn/article36/dsiisg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版網(wǎng)頁設(shè)計(jì)公司、微信小程序、做網(wǎng)站、云服務(wù)器、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)