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

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

C++中頭文件的概念與基本編寫方法

2020-05-23 14:11:47
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了C++中頭文件的概念與基本編寫方法,是C++入門學習中的基礎知識,需要的朋友可以參考下
 

1 標準庫中的頭文件
C++標準庫中的一切內容都被放在名字空間std中(名字空間中的內容對外是不可見的),但是帶來了一個新問題,無數現有的C++代碼都依賴于使用了多年的偽標準庫中的功能,如聲明在<iostream.h>等頭文件中的功能,使用std包裝標準庫導致現有代碼的不可用,為了兼容這種情況,標準委員會為包裝了std的那部分標準庫創建了新的頭文件,新的頭文件的文件名與舊的一樣,只是沒有.h這個后綴,如<iostream.h>就變成了<iostream>。對于C頭文件,采用同樣的方法,但還在每個頭文件名前加了字符c,如<string.h>就變成了<cstring>,<stdio.h>變成了<cstdio>。最好使用新的文件頭,使用新的文件頭的C++程序,需要使用using namespace std或者using namespace std::指定的類名,等方法來使需要的類對于我們的代碼可視。

2 自定義的頭文件
為了防止頭文件被重復引用,最好使用預處理定義,如下所示:

#ifndef MYHEAD_H#define MYHEAD_H……//頭文件中的內容#endif

 

(1)#ifndef:
   指示符#ifndef用來檢查頭文件的內容是否在前面已經被定義過,如果定義過,則#ifndef與#endif之間的語句將不被執行.所以習慣上要把頭文件的定義寫在這兩個語句之間.
如:對于MYHEAD.H這個頭文件

#ifndef MYHEAD_H#define MYHEAD_H#include "myhead.h"  ......#endif

(2) #ifdef
  指示符#ifdef常常被用來判斷一個預處理器常量是否已被定義,以便有條件地包含程序代碼。
如:

 int main() {  #ifdef DEBUG  cout<<"Beginning execution of main()/n";  #endif  string word;  vector<string> text;  while(cin>>word)  { #ifdef DEBUG cout<<"word read:"<<word<<"/n"; #endif text.push_back(word);   } //..... }

在此程序中,如果定義了DEBUG,則其中包含的兩個語句都將被執行,如果沒有定義,則其中的兩個輸出語句不被執行。

3 預處理相關知識
(1) #ifdef :判斷一個預處理常量是否被定義,如#infef DEGUG
(2) #ifndef:判斷一個預處理常量是否沒被定義
(3) #define:定義一個預處理常量,如#define DEBUG
(4) #include
(5) #endif
(6) 對預處理常量的定義還可以在編譯時進行,如CC –D DEBUG main.c
(7)編譯C++程序時,編譯器自動定義了一個預處理器名字__cplusplus(注意前面有兩個下劃線),因此可以根據這個來判斷該程序是否是C++程序,以便有條件地包含一些代碼,如:

#ifndef MYHEAD_H#define MYHEAD_H#ifdef __cplusplusextern "C" {#endifint DMpostprocessing();#ifdef __cplusplus}#endif#endif

(8)在編譯C程序時,編譯器會自動定義預處理常量__STDC__。當然__cplusplus和__STDC__ 不會同時被定義;
(9)另外兩個比較有用的預定義常量是__LINE__(記錄文件已經被編譯的行數)和__FILE__(包含正在被編譯的文件名稱)。使用如下:

if(element_count==0) cerr<<"Error:"<<__FILE__   <<":line"<<__LINE__   <<"element_count must be non-zero./n";

(10) __DATE__:編譯日期,當前被編譯文件的編譯日期
(11) __TIME__:編譯時間,當前被編譯文件的編譯時間
格式如:hh:mm:ss

 08:17:05   Oct 31 2006
(12) C庫頭文件的C++名字總是以字母C開頭,后面去掉.h,如assert.h在C++中為cassert;

assert()是C語言標準庫中提供的一個通用預處理器宏。常用其來判斷一個必需的前提條件,以便程序能夠正確執行。與其關聯的頭文件是:#include <assert.h>
如:

 assert(filename!=0);

表示:如果后面的程序能夠正確執行,需要filename不為0,如是條件為假,即其等于0,斷言失敗,則程序將輸出診斷消息,然后終止。

其c++名字是:cassert
C庫頭文件的C++名字總是以字母C開頭
注:在C++中使用C標準庫中的頭文件時,一定要使用using namespace std;來使其處在一個名字空間中,才能正確使用

(13)在C++中頭文件后綴各不相同,因此標準的C++頭文件沒有指定后綴

4 C++中的文件輸入輸出

頭文件:#include <fstream>

使用文件輸入輸出實例:

 #include <fstream>//為了打開一個輸出文件,先聲明一個ofstream類型的對象: ofstream outfile("name-of-file");//為了測試是否已經成功打開了一個文件,如下判斷: //如文件不能打開值為false if(!outfile)   cerr<<"Sorry! We were unable to open the file!/n";//為了打開一個輸入文件,先聲明一個ifstream類型的對象:  ifstream infile("name of file");  if(!infile)   cerr<<"Sorry! We were unable to open the file!/n";一個簡單程序:  #include <iostream>  #include <fstream>  #include <string>  int main()  {   ofstream outfile("out_file"); ifstream infile("in_file"); if(!infile){   cerr<<"error:unable to open input file!/n";   return -1; } if(!outfile) {   cerr<<"error:unable to open output file!/n";   return -2; } string word; while (infile>>word)  outfile<<word<<' '; return 0;  }

頭文件里有些什么?
頭文件的使用主要體現在兩個方面,一個是重(音chóng)用(即多次使用),另一個是共用。

那些提供標準庫函數的頭文件就是為了重用。很多程序或工程可能會用到這些標準庫函數,把它們寫在頭文件里面,每次使用的時候只需要包含已經完成的頭文件就可以了。

頭文件的共用主要體現在C++的多文件結構中。由于目前的程序規模較小,尚不需要用到多文件結構,所以在此對頭文件的共用不作展開。有興趣的讀者可以查閱相關書籍。
那么,如果我們要自己編寫一個可以重用的頭文件,里面應該寫些什么呢?

類似于標準庫函數,我們在頭文件里面應該模塊化地給出一些函數或功能。另外還應該包括獨立實現這些函數或功能的常量、變量和類型的聲明。

下面我們就來看一個頭文件應用的實例:

//shape.h#include "math.h"//在計算三角形面積時要用到正弦函數const double pi=3.14159265358;//常量定義struct circle//類型聲明{  double r;};struct square{  double a;};struct rectangle{  double a,b;};struct triangle{  double a,b,c,alpha,beta,gamma;};double perimeter_of_circle(double r)//函數定義{  return 2*pi*r;}double area_of_circle(double r){  return pi*r*r;}double perimeter_of_square(double a){  return 4*a;}double area_of_square(double a){  return a*a;}double perimeter_of_rectangle(double a,double b){  return 2*(a+b);}double area_of_rectangle(double a,double b){  return a*b;}double perimeter_of_triangle(double a,double b,double c){  return a+b+c;}double area_of_triangle(double a,double b,double gamma){  return sin(gamma/180*pi)*a*b/2;}//main.cpp#include "iostream.h"#include "shape.h"//包含我們編寫好的shape.hint main(){  circle c={2};  square s={1};  rectangle r={2,3};  triangle t={3,4,5,36.86989,53.13011,90};  cout <<"Perimeter of circle " <<perimeter_of_circle(c.r) <<endl;  cout <<"Area of square " <<area_of_square(s.a) <<endl;  cout <<"Perimeter of rectangle " <<perimeter_of_rectangle(r.a,r.b) <<endl;  cout <<"Area of triangle " <<area_of_triangle(t.b,t.c,t.alpha) <<endl;  return 0;}

運行結果:

Perimeter of circle 12.5664Area of square 1Perimeter of rectangle 10Area of triangle 6

我們編寫好了shape.h頭文件,以后用到計算圖形周長或面積的時候,就不需要重新編寫函數了,只需要包含這個頭文件就行了。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美二区在线播放| 亚洲r级在线观看| 51精品国产黑色丝袜高跟鞋| 久久久久久国产精品美女| 欧美激情视频一区二区三区不卡| 97av在线影院| 青青草原成人在线视频| 久久成人综合视频| 精品久久久国产精品999| 欧美日韩国产综合视频在线观看中文| 91成人福利在线| 久久精品久久久久电影| 亚洲欧美制服另类日韩| 欧美日韩在线视频一区| 欧美日韩一区免费| 91av免费观看91av精品在线| 97久久久免费福利网址| 久久精品国产亚洲7777| 国产综合香蕉五月婷在线| 成人h视频在线观看播放| 成人a在线观看| 亚洲欧美国内爽妇网| 色婷婷成人综合| 欧美性xxxx极品hd欧美风情| 粗暴蹂躏中文一区二区三区| 中文字幕v亚洲ⅴv天堂| 欧美黄色性视频| 日韩av电影手机在线| 国产一区深夜福利| 九九精品视频在线| 欧美国产日韩xxxxx| 日韩黄在线观看| 国产欧美久久久久久| 久久精品成人动漫| 亚洲欧洲视频在线| 成人深夜直播免费观看| 亚洲女人初尝黑人巨大| 91久久国产综合久久91精品网站| 91精品国产高清久久久久久91| 国模视频一区二区三区| 亚洲男人天堂手机在线| 麻豆成人在线看| 91免费的视频在线播放| 日韩福利在线播放| 日韩电视剧免费观看网站| 97不卡在线视频| 日韩精品黄色网| 青青草国产精品一区二区| 日韩不卡中文字幕| 国语自产精品视频在线看一大j8| 国产精品第七影院| 永久555www成人免费| 亚洲欧洲视频在线| 国产香蕉精品视频一区二区三区| 色多多国产成人永久免费网站| 97av视频在线| 69av在线播放| 久久视频免费在线播放| 日韩精品免费综合视频在线播放| 欧美最猛黑人xxxx黑人猛叫黄| 欧美激情一区二区久久久| 亚洲自拍小视频| 奇米成人av国产一区二区三区| 国内揄拍国内精品| 久久91精品国产91久久跳| 亚洲成人久久一区| 国产精品直播网红| 国产精品高潮呻吟视频| 88xx成人精品| 欧美日韩亚洲一区二区| 国产一区二区三区在线播放免费观看| 日韩欧中文字幕| 成人午夜黄色影院| 亚洲人a成www在线影院| 日韩欧美一区二区三区| 久久久久在线观看| 国内成人精品视频| 国模精品视频一区二区| 最好看的2019的中文字幕视频| 欧美中文在线观看国产| 成人激情视频在线| 亚洲欧美在线磁力| 国产色视频一区| 欧美激情a在线| 日韩在线观看免费av| 国产欧美日韩免费看aⅴ视频| 国产欧美日韩中文字幕| 久久99视频免费| 国产精品久久久久9999| 69精品小视频| 色老头一区二区三区在线观看| 国语对白做受69| 1769国内精品视频在线播放| 亚洲成人免费在线视频| 日韩精品免费视频| 欧美在线播放视频| 青青久久av北条麻妃海外网| 欧美成人精品xxx| 久久久成人的性感天堂| 欧美精品电影免费在线观看| 97在线视频免费播放| 国产精品永久免费观看| 国产欧美精品日韩| 久久久在线视频| 国产欧美一区二区三区在线看| 欧美日韩国产黄| 国内精品小视频| 91香蕉嫩草神马影院在线观看| 久久网福利资源网站| 欧美中文字幕在线观看| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲精品一区二区网址| 色综合久久天天综线观看| 日韩欧美高清在线视频| 国产一区二区在线播放| 日韩精品在线视频美女| 日本免费久久高清视频| 日韩免费在线播放| 91黄色8090| 亚洲国产另类久久精品| 亚洲视频axxx| 国产精品专区第二| 国内精品小视频在线观看| 92看片淫黄大片欧美看国产片| 成人精品在线视频| 日韩成人在线观看| 亚洲欧美国产精品va在线观看| 欧美午夜视频在线观看| 91久久精品久久国产性色也91| 最新69国产成人精品视频免费| 欧美日韩在线看| 久久久精品在线观看| 中文字幕久久亚洲| 国产精品美女www爽爽爽视频| 亚洲午夜av电影| 国产99久久精品一区二区永久免费| 久久久久久18| 久久精品国产久精国产一老狼| 久久久精品网站| 成人福利网站在线观看| 亚洲激情电影中文字幕| 欧美性色视频在线| 日韩综合视频在线观看| 97视频免费在线观看| 欧美在线视频a| 超在线视频97| 日韩亚洲精品视频| 国产婷婷成人久久av免费高清| 中文国产亚洲喷潮| 亚洲成人黄色网址| 亚洲精品乱码久久久久久金桔影视| 日本19禁啪啪免费观看www| 欧美国产一区二区三区| 国产欧美一区二区三区视频| 一本色道久久综合亚洲精品小说| 国产一区二区三区三区在线观看| 国产精品日韩在线一区| 亚洲老板91色精品久久| 国产精品高潮视频| 热久久美女精品天天吊色| 精品国产999| 国产成人avxxxxx在线看| 色综合久综合久久综合久鬼88| 亚洲成人av片在线观看|