最近在看一本《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對應的接口即可。