標籤:
條款一 c++ 為一個語言聯邦
1、四個層次 C:blocks,語句,前置處理器,內建資料類型,數組,指標
物件導向的C++:封裝,多態,繼承
Template C++
STL
條款二 盡量以const,enum,inline代替#define
Static const
常量的聲明和定義,聲明應該是在標頭檔當中,定義是在實現檔案當中。對於基本類型需要一個類似賦值的語句,例如:
const double classname::membername = 12;
但是對於對象的定義使用下面的方式 class classone{};
const classone classname::class1;
這點實際上和java非常不一樣,在java當中這隻是意味著進行了聲明,初始化需要new出對象來,但是這裡已經進行了初始化,而且此處使用預設的建構函式
條款三 儘可能使用const
1、const 常量的定義
const char * pointer 表示const的data,但是指標可以變化
char * const pointer 表示const的指標,但是指標指向的data可以變化
const char * const pointer 表示data和指標都是不能變化的
總結:在星號之後表示指標式const,在星號之前表示data是const
2、const 在函數定義當中的使用
const 成員函數
class classname{ private: string functionname() const; };
此處表示functionname成員函數不能修改類的資料成員
const參數
string function (const string & str);
此處表示function不可以修改str
條款4 確定對象被使用前已經被初始化
c++規定對象的成員變數的初始化在進入建構函式本體之前,在建構函式中進行的都不是初始化,而是賦值操作。在這之前有一個defaut建構函式被自動調用的過程 因此實際上default建構函式的構造全部作廢。
可以使用初始化列表
這不僅是為了提高效率,有時也是必須的,比如類成員的成員變數如果為const類型則在聲明時就應該進行初始化,若為default的方式是會出錯的,需要使用初始化列表,來對其定義
Effective C++ 隨筆(1)