c++是個多重范型程式語言,乙個同時支援過程形式、物件導向形式、函式形式、泛型形式、元程式設計形式的語言;
1. c:區塊、語句、預處指標等來自於c。
2.object-oriented c++: class,封裝、繼承、多型等等 這部分是物件導向設計之古典守則在c++上最直接的實施。
3.template c++:這部分是c with class所求的。
4.stl:stl是template程式庫,它對容器、迭代器、演算法、以及函式物件的規約有極大地緊密配合與協調,然而templates及程式庫也可以其它想法建置出來。
!c++高效程式設計守則視狀況而變化,取決於你使用了c++的那一部分。
class專屬常量必須是class的乙個成員,且保證在記憶體中只有乙份應該宣告為static。
#define不能建立乙個class專屬常量,#define不重視作用域,不具有任何封裝性。
乙個const的位址是合法的,乙個enum的位址是不合法的。取乙個defin的位址也是不合法的。
如果不想別人去的pointer或reference指向你的某個整數常量,可以使用enum實現這個約束。
! 對於單純的常量,最好用const 物件或enum替換#define。
對於形式函式的巨集,最好改用inline的函式替換#define。
const出現在*號左邊,表示被指物是常量;如果出現在*右邊,表示指標自身為常量,如果出現在訊號兩邊表示所指物與所指物件兩者為常量。
宣告迭代器為const就像宣告指標為const一樣(即宣告乙個t*型別的const指標),表示這個迭代器始終指向乙個物件,但它所指物件的值可以改變。
如果你希望迭代器所指物件的值不能改變,你可以使用const_iterator。
將const實施與成員函式的目的是為了確保該成員可作用於const物件。
兩個成語函式的const屬性不同,可以被過載。
成員函式只有不更改物件的任何成員變數是才可以說是const,也就是說它不改變物件的內容。
!將某些東西宣告為const可以幫助編輯器檢測出錯誤的語法。const可以施加於任何作用域類的物件,函式引數,函式返回型別,成員函式體。
編譯器強行實施bitwise constness,但你編寫程式時應該使用「概念上的常量性」(conceptual constness)。
當const和non-const成員函式有著實質等價的實現時,令non-const版本呼叫const版本可避免**的重複。
在某些平台上讀取未初始化的值,就可以讓你的程式終止執行。
物件的成員變數的初始化在進入建構函式之前,建構函式內不是初始化而是被賦值。
規定總是在初值列表中列出所有成員變數,以免還得記住哪些成員變數無需初值。
如果成員變數是const或references,它們一定需要初值,不能被賦值。
在擁有多個建構函式,每個函式都有自己的初始值列表的情況下,可以遺漏那些「賦值和初始化一樣好」的成員變數改用賦值操作,並將它們封裝成乙個private的成員函式,供所有析構函式呼叫。
c++有著固定的成員函式初始化次序。base class早於其derived class被初始化,class成員變數總是以宣告的順序被初始化。
static物件其壽命從被構造出來直到程式結束為止。
!為內建型別物件進行手工初始化,因為c++不保證初始化它們
建構函式最好使用成員初值列表,而不要在建構函式類使用賦值操作,初值列表列出的成員變數,其排列順序應該和它們在class中宣告次序相同。
為免除「誇編譯單元之初始化次序」問題,以local static物件替換non-local static物件。
讓自己習慣C
0.preface 前言 要認真弄清楚每個條款,還是很有必要自己讀一下 effective c 寫此篇部落格單純為了記錄下相關知識,以便日後複習 1.view c as a federation of languages.視c 為乙個語言聯邦 c 可以看作由四種次語言組成 cobject orien...
effective c 讓自己習慣c
一 忠告 a 對於常量,用const和 enum 代替define b 對於形似函式,用inline代替 define 二 盡量替換掉define的原因 a define a 1.63出錯時,報 1.63 出錯 const int a 1.63 出錯時,報 a出錯。顯然報變數名出錯更加容易除錯 b ...
Effective C 讓自己習慣C
c 的四個語言層次 c c 是以c為基礎的。基本資料型別 語句 預處理器 陣列 指標等統統來自c。oject oriented c 物件導向這一特性包含了 類,封裝 宣告與實現相分離 繼承 多繼承和多重繼承 建構函式 析構函式 拷貝建構函式 拷貝賦值運算子 多型 靜態繫結 函式過載,動態繫結 虛函式...