C++的標頭檔,源檔案區別

來源:互聯網
上載者:User
一、聲明與定義的區分:
一個聲明就是一個定義,除非 :
聲明:引入名稱
定義:引入實體
1.它聲明了一個沒有詳細說明函數體的函數
2.它包含一個extern定義符且沒有初始化函數或函數體
3.它是一個包含在一個類定義之內的靜態類資料成員的聲明,它必須在最終程式的某處準確的定義一次
4.它是一個類名聲明,如class test;
5.它是一個typedef聲明。言外之意:
1。類的聲明也就是定義
2。同時賦初值的聲明也就是定義,如int a=2;
3。類非待用資料成員的聲明也就是定義???
4。類的所有成員函數的聲明也就是定義一個定義就是一個聲明,除非:
1.它定義的是一個待用資料成員
2.它定義了一個非內聯成員函數內部串連和外部串連:
編譯時間每個檔案會被編譯成一個含有必要資訊的源檔案(又叫編譯單元),然後編譯單元會連接成一個和族檔案同名的.o檔案,.o檔案把不同的編譯單元中產生的符號聯絡起來,構成一個可執行檔。有兩種截然不同的連結:內部的和外部的,將這些編譯單元聯絡起來。
內部串連:對這個定義的訪問被局限在當前編譯單元,其他編譯單元無法訪問。
外部串連:可被其他單元訪問,因此名稱在整個執行檔案中必須唯一。

類的定義(同時也是聲明),enum,struct,都是內部串連,內嵌函式,靜態非類成員資料也是
typedef聲明的類型也是內連接。非內聯成員函數(包括靜態成員)有外部串連,非內嵌函式,非靜態自由函數(非類的成員函數)也是外串連。聲明只對當前編譯單元有用,他們不會影響到.o檔案, .h檔案,由於該檔案會被其他.cpp檔案包含,但由於聲明只是對當前編譯單元有效,是不會將符號引入.o檔案,所以該檔案不能含有任何外部串連的符號(資料成員和函數)的定義。一般情況下也不要包含內串連符號的定義。 綜上所訴:.h檔案中能包含:
 
1。類成員資料的聲明,但不能賦值2.類待用資料成員的定義和賦值,但不建議,只是個聲明就好。
3。類的成員函數的聲明
4。非類成員函數的聲明5.常數的定義:如:const int a=5;6.靜態函數的定義7.類的內嵌函式的定義 不能包含:1.  所有非靜態變數(不是類的資料成員)的聲明2。 預設命名空間聲明不要放在標頭檔,using namespace std;等應放在.cpp中,在.h檔案中使用std::string 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.