成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++頭文件規則介紹

開發 后端
在C++語言家族程序中,頭文件被大量使用,一般而言,每個C++程序通常由頭文件和定義文件組成,希望本文能給您帶來幫助。

C++中的C++頭文件是用戶應用程序和函數庫之間的橋梁和紐帶,在整個軟件中,頭文件不是最重要的部分,但它是C++語言家族中不可缺少的組成部分,有了它給技術人員提供了大大的便捷。

因為一個頭文件的內容實際上是會被引 入到多個不同的.cpp文件中的,并且它們都會被編譯。放聲明當然沒事,如果放了定義,那么也就相當于在多個文件中出現了對于一個符號(變量或函數)的定 義,縱然這些定義都是相同的,但對于編譯器來說,這樣做不合法。

所以,應該記住的一點就是,.h頭文件中,只能存在變量或者函數的聲明, 而不要放定義。即,只能在C++頭文件中寫形如:extern int a;和void f();的句子。這些才是聲明。如果寫上int a;或者void f() {}這樣的句子,那么一旦這個頭文件被兩個或兩個以上的.cpp文件包含的話,編譯器會立馬報錯。(關于extern,前面有討論過,這里不再討論定義跟 聲明的區別了。)

但是,這個規則是有三個例外的。

一,頭文件中可以寫const對象的定義。因為全局的const對象默 認是沒有extern的聲明的,所以它只在當前文件中有效。把這樣的對象寫進頭文件中,即使它被包含到其他多個.cpp文件中,這個對象也都只在包含它的 那個文件中有效,對其他文件來說是不可見的,所以便不會導致多重定義。同時,因為這些.cpp文件中的該對象都是從一個頭文件中包含進去的,這樣也就保證 了這些.cpp文件中的這個const對象的值是相同的,可謂一舉兩得。同理,static對象的定義也可以放進C++頭文件

二,C++頭文件中可 以寫內聯函數(inline)的定義。因為inline函數是需要編譯器在遇到它的地方根據它的定義把它內聯展開的,而并非是普通函數那樣可以先聲明再鏈 接的(內聯函數不會鏈接),所以編譯器就需要在編譯時看到內聯函數的完整定義才行。

如果內聯函數像普通函數一樣只能定義一次的話,這事兒就難辦了。因為在 一個文件中還好,我可以把內聯函數的定義寫在最開始,這樣可以保證后面使用的時候都可以見到定義;但是,如果我在其他的文件中還使用到了這個函數那怎么辦呢?

這幾乎沒什么太好的解決辦法,因此C++規定,內聯函數可以在程序中定義多次,只要內聯函數在一個.cpp文件中只出現一次,并且在所有的.cpp文 件中,這個內聯函數的定義是一樣的,就能通過編譯。那么顯然,把內聯函數的定義放進一個頭文件中是非常明智的做法。

三,頭文件中可以寫類 (class)的定義。因為在程序中創建一個類的對象時,編譯器只有在這個類的定義完全可見的情況下,才能知道這個類的對象應該如何布局,所以,關于類的 定義的要求,跟內聯函數是基本一樣的。

所以把類的定義放進C++頭文件,在使用到這個類的.cpp文件中去包含這個C++頭文件,是一個很好的做法。在這里,值得一提 的是,類的定義中包含著數據成員和函數成員。

數據成員是要等到具體的對象被創建時才會被定義(分配空間),但函數成員卻是需要在一開始就被定義的,這也就 是我們通常所說的類的實現。一般,我們的做法是,把類的定義放在頭文件中,而把函數成員的實現代碼放在一個.cpp文件中。這是可以的,也是很好的辦法。

不過,還有另一種辦法。那就是直接把函數成員的實現代碼也寫進類定義里面。在C++的類中,如果函數成員在類的定義體中被定義,那么編譯器會視這個函數為 內聯的。因此,把函數成員的定義寫進類定義體,一起放進頭文件中,是合法的。

注意一下,如果把函數成員的定義寫在類定義的C++頭文件中,而沒有寫進類定義中, 這是不合法的,因為這個函數成員此時就不是內聯的了。一旦頭文件被兩個或兩個以上的.cpp文件包含,這個函數成員就被重定義了。

【編輯推薦】

  1. C與C++中標準輸入實現方式上的一點區別
  2. C++編譯器如何對Const常量進行分配存儲空間
  3. C++類庫設計的基本構思與方法
  4. 玩轉C++語言的幾種方法
  5. 如何更好的進行C++代碼編制
責任編輯:chenqingxiang 來源: 博客園
相關推薦

2010-02-06 14:48:37

C++頭文件

2010-01-25 18:26:44

CC++頭文件

2010-02-02 13:04:03

C++頭文件

2011-07-14 22:36:37

C++

2011-06-17 16:09:04

freadfwrite

2010-01-20 10:19:55

C++數組

2010-01-25 10:54:18

C++設計

2010-02-01 10:32:01

C++文件操作

2010-02-05 10:46:10

C++文件流

2024-05-17 13:27:45

頭文件C++開發

2010-01-15 10:41:06

CC++

2010-01-15 15:52:18

CC++

2010-01-26 10:27:43

C++語言

2009-08-19 09:57:01

C++ RAII

2010-02-06 09:59:54

C++ void使用規

2010-01-19 17:54:47

C++程序

2010-01-25 18:19:17

C++特性

2010-01-25 18:19:17

C++特性

2011-07-20 13:57:06

C++STL

2010-01-18 10:16:58

學習C++
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九精品在线 | 日韩精品成人 | 亚洲精品福利在线 | 日韩精品一区二区三区 | 91精品国产92| h视频网站在线观看 | 久久久99国产精品免费 | 日日摸夜夜添夜夜添精品视频 | 一区二区三区国产精品 | 亚洲精品一区二 | 中国大陆高清aⅴ毛片 | 中文字幕成人av | 精品免费视频 | 日韩黄| 91精品免费视频 | 亚洲视频第一页 | 成人激情视频网 | 日本精a在线观看 | 久久99精品国产 | 欧美一级在线 | 欧美区日韩区 | 亚洲国产精品成人综合久久久 | 久久91| 亚洲天堂中文字幕 | 国产亚洲一区二区三区在线观看 | 日韩成人免费中文字幕 | 成人精品国产一区二区4080 | 久久国产精品视频 | 欧美成人精品一区二区男人看 | 久久美女视频 | 在线欧美日韩 | 成人在线视频一区 | 视频一区在线观看 | 中文字幕在线观看一区 | 国产免费又色又爽又黄在线观看 | 国产视频久久 | 午夜免费av | 国产视频在线观看一区二区三区 | 久久国产亚洲 | 亚洲精品在线视频 | 免费的日批视频 |