亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++中定義自己的頭文件

2019-11-06 06:21:40
字體:
來源:轉載
供稿:網友

本文轉自:http://blog.163.com/liumaohua890413@126/blog/static/3578516420101012105736305/

     由多個文件組成的程序需要一種方法連接名字的使用和聲明,在C++中是通過頭文件實現的。頭文件一般包括類的定義,extern 變量的聲明和函數的聲明。使用或定義這些實體的文件要包含適當的頭文件。   頭文件的正確使用有兩個好處:保證所有文件使用給定實體的同一聲明;當聲明需要修改時,只有頭文件需要更新。在定義頭文件時要注意頭文件中所做的聲明在邏輯上應該是適于放在一起的,否則,編譯頭文件會花費較長時間。   使用頭文件時需要注意以下幾點:   

1、頭文件是用于聲明而不是定義

  當定義頭文件時,記住定義和聲明的區別是很重要的。定義只可以出現一次,而聲明可以出現多次。因為頭文件包含在多個源文件中,所以不應該含有變量或函數的定義,否則會造成在同一個程序對同一個變量或函數的多次定義。下列語句是定義,所以不應該放在頭文件中:   extern int ival = 10;   double ix;   對頭文件不應該含有定義這一規則,有三個例外。頭文件可以定義類,值在編譯時就已經知道的const對象和inline函數。這些實體可以在多個源文件中定義,只要每個源文件中的定義是相同的。   在頭文件中定義這些實體,是因為編譯器需要它們的定義來產生代碼。例如:為了產生能定義或使用類的對象的代碼,編譯器需要知道組成該類型的數據成員,同樣還需要知道能夠在這些對象上執行的操作。對于const對象,作以下說明:   除非特別說明,在全局作用域聲明的const變量默認為是定義該對象的文件的局部變量。此變量只存在于那個文件中,不能被其他文件訪問。通過指定const變量為extern,就可以在整個程序中訪問const對象。例如:   //在file1中定義變量ix   extern const int ix = 5;   //在file2中我們可以這樣使用它   extern const int ix;   for (int index = 0; index != ix; ++index)   {…}   通過對const變量進行為編譯器可見的初始化式初始化后,const變量成為常量表達式。為了能夠讓const變量和它的初始化式在每個文件中都可見,一般都把這樣的const變量定義在頭文件中,從而使包含該頭文件的文件都可以使用相同的常量值。無論該const變量何時使用,編譯器都可以看見其初始化式。在C++中任何變量都只能定義一次,定義會分配存儲空間,而所有對該變量的使用都關聯到同一存儲空間,因為const對象默認為定義它的文件的局部變量,所以把它們定義放在頭文件中是合法的。   如果const變量不是用常量表達式初始化,那么它就不應該在頭文件中定義,相反,它應該和其他變量一樣,該const變量應該在一個源文件中定義并初始化,然后在頭文件中為它添加extern聲明,以使其能被多個文件共享。

2、預處理器的簡單介紹

  #include設施是C++預處理器的一部分,它只接受一個參數:頭文件名。預處理器用指定的頭文件的內容替代每個#include.

3、頭文件保護符

  頭文件經常#include其他頭文件,頭文件定義的實體經常使用其他頭文件的設施,在同一源文件中還可能多次包含同一頭文件。比如我們自己定義了一個Query.h的頭文件,該頭文件中包含了string的頭文件。同時,我們在編寫源代碼時也使用了string庫,這樣string 庫就包含了兩次:一次是通過程序本身直接包含,一次是通過包含Query頭文件間接包含。   設計頭文件時,應使其可以多次包含在同一源文件中,我們必須保證多次包含同一頭文件不會引起該頭文件中定義的類和對象被多次定義,使得頭文件安全的通用做法,是使用預處理器定義頭文件保護符來避免在已經見到頭文件的情況下重新處理該頭文件的內容。      

4、定義預處理變量及頭文件

  為了避免名字沖突,預處理變量經常用全大寫字母表示。預處理變量有兩種狀態:已定義或未定義。定義預處理器變量和檢測其狀態所用的預處理指示不同。#define指示接受一個名字并定義該名字為預處理變量。#ifndef指示檢測指定的預處理器變量是否未定義。如果預處理器變量未定義,那么跟在其后的所有指示都被處理,直到出現#endif。可以使用這種方法來預防多次包含同一頭文件。   #ifndef QUERY_H   #define QUERY_H   //定義query.h中的內容   #endif

  條件指示   #ifndef QUERY_H   測試 QUERY_H預處理器變量是否未定義。如果 QUERY_H未定義,那么#ifndef測試成功,跟在#ifndef后面的所有行都被執行,直到發現#endif.相反,如果QUERY_H已定義,那么#infdef指示測試為假,該指示和#endif指示之間的代碼都被忽略。通常情況下,我們用定義在頭文件中的實體(如類)來命名預處理器變量來避免預處理器變量重名的問題。通過使用類名來組成頭文件和預處理器變量的名字,可以使得很可能只有一個文件將會使用該預處理器變量。

5、使用自定義的頭文件

  #include指示接受以下兩種形式:   #include<iostream>   #include"query.h"   如果頭文件名括在尖括號< >里,那么認為該頭文件是標準頭文件。編譯器會在預定義的位置集查找該頭文件,這些預定義的位置可以通過設置查找路徑環境變量或者通過命令行選項來修改。如果頭文件名括在一對引號里,那么認為它是非系統頭文件,非系統頭文件的查找通常開始于源文件所在的路徑。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产老师黑色丝袜高跟鞋| 国产经典一区二区| 久久躁日日躁aaaaxxxx| www高清在线视频日韩欧美| 亚洲一品av免费观看| 亚洲欧洲在线视频| 欧美一级大胆视频| 日韩av在线直播| 欧美国产在线电影| 日韩av成人在线观看| 国产91色在线|免| 日韩av电影在线免费播放| 亚洲天堂男人天堂| 国产视频精品va久久久久久| 亚洲第一中文字幕在线观看| 色诱女教师一区二区三区| 一道本无吗dⅴd在线播放一区| 国产精品自拍偷拍视频| 国产91色在线|免| 欧美孕妇孕交黑巨大网站| 国产精品旅馆在线| 91精品在线播放| 亚洲人精选亚洲人成在线| 中文日韩在线观看| 91高潮精品免费porn| 欧美中文字幕精品| 亚州欧美日韩中文视频| 国产精品专区h在线观看| 国产精品69av| 日韩有码视频在线| 欧美日韩电影在线观看| 欧美裸身视频免费观看| 91精品久久久久久久久久另类| 日韩影视在线观看| 欧美成人免费在线观看| 欧美电影免费观看高清完整| 久久精品最新地址| 97国产一区二区精品久久呦| 这里只有精品视频在线| 亚洲国产精品久久久久秋霞不卡| 91亚洲国产成人久久精品网站| 国产一区二区三区视频在线观看| 亚洲第一区第二区| 欧美在线观看一区二区三区| 亚洲国产精品va在线看黑人动漫| 国产亚洲a∨片在线观看| 亚洲欧美日本伦理| 日韩在线视频观看| 亚洲欧美国产va在线影院| 92看片淫黄大片欧美看国产片| 久久免费精品视频| 国产专区精品视频| 亚洲夜晚福利在线观看| 91超碰caoporn97人人| 欧美综合激情网| 国产精品青青在线观看爽香蕉| www国产精品com| 久久成人亚洲精品| 欧美最顶级丰满的aⅴ艳星| 97香蕉久久超级碰碰高清版| 国产精品高潮视频| 97精品国产97久久久久久免费| 最新国产成人av网站网址麻豆| 日韩亚洲国产中文字幕| 国产精品美女免费看| 91欧美激情另类亚洲| 在线播放日韩欧美| 欧美日韩国产成人在线观看| 日韩中文字幕欧美| 亚洲国产私拍精品国模在线观看| 久久国产加勒比精品无码| 日韩欧美国产高清91| 欧美在线一区二区三区四| 成人黄色av免费在线观看| 国产精品人成电影在线观看| 国产精品久久久久久久久男| 日韩一二三在线视频播| 中文字幕日韩综合av| 国产欧美最新羞羞视频在线观看| 欧美日韩国产91| 黄色成人av在线| 国产v综合v亚洲欧美久久| 在线精品播放av| 欧美日韩精品在线视频| 日韩免费av片在线观看| 久久精品国产免费观看| 国产在线98福利播放视频| 亚洲视频在线观看| 日韩精品极品在线观看播放免费视频| 午夜精品福利视频| 国产亚洲精品久久久优势| 欧美精品在线视频观看| 国产精品成人品| 98精品国产自产在线观看| 欧美成人国产va精品日本一级| 日韩中文字幕国产精品| 精品丝袜一区二区三区| 色爱av美腿丝袜综合粉嫩av| 日本亚洲精品在线观看| www.久久撸.com| www.久久久久| 亚洲免费视频网站| 日韩电影免费观看中文字幕| 亚洲午夜久久久久久久| 中文字幕亚洲无线码在线一区| 丰满岳妇乱一区二区三区| 国产日韩欧美一二三区| 欧美日韩一区二区三区在线免费观看| 国产一区二区三区在线观看视频| 亚洲第一二三四五区| 欧美性猛交丰臀xxxxx网站| 日韩欧美亚洲一二三区| 欧美二区乱c黑人| 欧美在线视频网| 精品国产一区二区在线| 一区二区三区视频免费| 成人欧美一区二区三区在线| 欧美性猛交xxx| 在线午夜精品自拍| 久久久亚洲影院你懂的| 色诱女教师一区二区三区| 欧美国产精品人人做人人爱| 欧美视频裸体精品| 97精品视频在线观看| 欧美一区二区三区免费视| 亚洲国产成人在线视频| 一夜七次郎国产精品亚洲| 欧美福利视频网站| 亚洲国产精品人久久电影| 日韩人体视频一二区| 一区二区三区高清国产| 日韩国产欧美精品一区二区三区| 91高清视频在线免费观看| 人九九综合九九宗合| 亚洲一区二区三区成人在线视频精品| 欧美大尺度激情区在线播放| 欧美日韩国产va另类| 欧美日韩高清区| 久久久久久91香蕉国产| 国产精品免费看久久久香蕉| 久久亚洲精品小早川怜子66| 亚洲精品国产拍免费91在线| 欧美一区二区三区免费观看| 国产视频观看一区| 国产成人精品免高潮在线观看| 午夜精品理论片| 92国产精品视频| 国产成人拍精品视频午夜网站| 日韩在线视频播放| 亚洲午夜久久久久久久| 久久久国产视频| 欧美一级黑人aaaaaaa做受| 亚洲日本欧美日韩高观看| 成人福利视频在线观看| 国产精品一久久香蕉国产线看观看| 在线成人激情黄色| 亚洲精品动漫100p| 国产裸体写真av一区二区| 久久精品视频va| 欧美日韩黄色大片| 国产精品久久久久久久久久免费| 国产成人精品a视频一区www| 精品视频中文字幕| 国产午夜精品美女视频明星a级|