天天看點

google代碼規範

1. 構造函數的職責

構造函數中隻進行那些沒有實際意義的初始化,如果對象需要有意義的初始化,考慮使用另外的Init()方法并(或)增加一個成員标

記用于訓示對象是否已經初始化成功。

2. 預設構造函數

如果一個類定義了若幹成員變量又沒有其他構造函數,需要定義一個預設構造函數(沒有參數),否則編譯器将自動生成預設構造函數。

3. 明确的構造函數

對單參數構造函數使用 C++關鍵字 explicit。

隻有一個參數的構造函數可被用于轉換(隐式轉換生成一個新的對象),為避免構造函數被調用造成隐式轉換,可以将其聲明

為explicit。

4.結構體和類

僅當隻有資料時使用struct,其它一概使用class。

5.繼承 

使用組合通常比使用繼承更适宜,如果使用繼承的話,隻使用公共繼承。

實作繼承通過原封不動的重用基類代碼減少了代碼量,接口繼承可用于程式上增強類的特定API的功能。

限定僅在子類通路的成員函數為protected,需要注意的是資料成員應始終為私有。

當重定義派生的虛函數時,在派生類中明确聲明其為virtual。根本原因:如果遺漏virtual,閱讀者需要檢索類的所有祖先以确定該函數是否為虛函數。

6.多重繼承

隻有當最多一個基類中含有實作,其他基類都是以Interface為字尾的純接口類時才會使用多重繼承。

多重繼承允許子類擁有多個基類,要将作為純接口的基類和具有實作的基類差別開來。

7.接口

純接口:

1) 隻有純虛函數("=0")和靜态函數(下文提到的析構函數除外);

2) 沒有非靜态資料成員;

3) 沒有定義任何構造函數。如果有,也不含參數,并且為protected;

4) 如果是子類,也隻能繼承滿足上述條件并以Interface為字尾的類。

8. 操作符重載

一般不要重載操作符,尤其是指派操作(operator=)比較陰險,應避免重載。如果需要的話,可以定義類似Equals()、CopyFrom()等函數。

9.存取控制

将資料成員私有化,并提供相關存取函數,如定義變量foo_及取值函數 foo()、指派函數set_foo()。

存取函數的定義一般内聯在頭檔案中。

10.聲明次序

定義次序如下: 

public:

protected:

private:

11.編寫短小函數

函數盡量短小、簡單,便于他人閱讀和修改代碼。

如果函數超過40行,可以考慮在不影響程式結構的情況下将其分割一下