最近在看一本《c缺陷與陷阱》,意識到在大型程式時物件的宣告與定義的重要性

普通變數的定義與宣告

每個外部物件都必須在程式的某個地方進行定義。因此如果一個程式中包含了語句

extern int a;//宣告變數a

那麼,這個程式就必須在別處的某個地方包括語句

 int a;//代表定義外部int型變數a

或者 

int a=10;//定義變數a並初始化

這兩個語句既可以在同一個原始檔中,也可以不在同一原始檔中

若一個變數前加了static修飾符

static int a;//定義變數a,但變數a只在此檔案中起作用

static修飾符不僅適用於變數,也適用於函式。如果一個函式f()呼叫函式g(),且只有該函式f呼叫函式g,那麼就可以把函式f函式g寫在同一個檔案中,並把函式g宣告為static型的, 

 表明這個物件或者函式的作用域只在此檔案中。

函式的宣告方式

(作用域修飾符)返回值型別   函式名(引數表)

函式的定義方式

返回值型別  函式名 (引數表)

{

   函式體

}

對C++編譯器而言,當呼叫函式的時候,編譯器只需要看到函式的宣告。當定義類型別的物件時,編譯器只需要知道類的定義,而不需要知道類的實現程式碼。因此,因該將類的定義和函式宣告放在標頭檔案中,而普通函式和類成員函式的定義放在原始檔中。

這樣在用到對應的介面函式時只需包含xxx.h檔案即可,在需要修改函式內容時只在xxx.cpp修改。如果需要修改介面則只需修改xx.h對應的介面,xxx.cpp對應的介面即可。