W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在結(jié)構(gòu)體定義中聲明函數(shù),稍后再定義函數(shù),這看起來是一件麻煩事。任何時候你要改變一個函數(shù)的接口,都需要在兩個地方做修改,即使只是做了很小的變動,比如把一個參數(shù)聲明為const。
盡管如此,這種麻煩是有理由的,我們能夠把結(jié)構(gòu)體定義和函數(shù)分離到兩個文件中:頭文件包含著結(jié)構(gòu)體定義,而實現(xiàn)文件包含著函數(shù)。
頭文件通常和實現(xiàn)文件同名,但后綴是.h而不是.cpp。對于我們一直看的例子,頭文件名為Time.h,它包含以下內(nèi)容:
struct TIme {
// 實例變量
int hour, minute;
double second;
//構(gòu)造函數(shù)
Time (int hour, int min, double secs);
Time (double secs);
//修改器
void increment (double secs);
//函數(shù)
void print () const;
bool after (const Time& time2) const;
Time add (const Time& t2) const;
double convertToSeconds () const;
};
請注意,我們并不需要在結(jié)構(gòu)體定義中給每個函數(shù)名前面包含前綴Time::。編譯器知道我們聲明的函數(shù)是Time結(jié)構(gòu)體的成員。
Time.cpp包含了成員函數(shù)的定義(為節(jié)省篇幅,我已經(jīng)省去了函數(shù)體):
#include <iostream.h>
#include "Time.h"
Time::Time (int h, int m, double s) ...
Time::Time (idouble secs) ...
void Time::increment ( double secs) ...
bool Time::after (const Time& time2) const ...
Time Time::add (const Time& t2) const ...
double Time::convertToSeconds () const ...
在本例中,Time.cpp中的定義與Time.h中聲明的順序相同,這并非必要。
另一方面,有必要使用include語句將頭文件包含進(jìn)來。這樣一來,當(dāng)編譯器讀取函數(shù)定義時,它能足夠了解結(jié)構(gòu)體,便于檢查代碼并捕獲錯誤。
最后,main.cpp包含了函數(shù)main,以及我們需要的非Time結(jié)構(gòu)體的成員的函數(shù)(本例中沒有):
#include <iostream.h>
#include "Time.h"
void main()
{
Time currentTime (9, 14, 30.0);
currentTime.increment (500.0);
currentTime.print ();
Time breadTime (3, 35, 0.0);
Time doneTime = currentTime.add (breadTime);
doneTime.print ();
if (doneTime.after (currentTime)) {
cout << "The bread will be donw after it starts." <<endl;
}
}
再一次,main.cpp必須包含頭文件。
把如此小的程序分成三部分的好處也許并不明顯。其實,大部分優(yōu)點會在我們處理更大的程序時體現(xiàn)出來:
重用:當(dāng)你寫了個類似于Time的結(jié)構(gòu),你也許會發(fā)現(xiàn)它在多個程序中都有用。通過把Time的定義從main.cpp中分離出來,在其它程序中包含Time結(jié)構(gòu)會變得容易。
管理交互:隨著系統(tǒng)變大,組件之間的交互數(shù)量快速增加,變得難以管理。通過從使用它們的程序中分離出Time.cpp這樣的模塊,可以最小化這些交互。
獨立編譯:單獨的文件可以被獨立編譯,之后鏈接到一個程序中。其中的細(xì)節(jié)依賴于你的編程環(huán)境。隨著程序規(guī)模變大,獨立編譯能節(jié)省很多時間,由于你通常每次只需要編譯少數(shù)一些文件。
對于類似本書這樣的小程序來說,分割程序并沒有多大好處。但你最好知道這個特性,特別是它解釋了我們寫的第一個程序中出現(xiàn)的一個語句:
#include <iostream.h>
iostream.h是一個包含著cin和cout聲明以及操作它們的函數(shù)的頭文件,當(dāng)編譯程序時,你需要該頭文件中的信息。
這些函數(shù)的實現(xiàn)存儲在一個庫中,有時候被稱為"標(biāo)準(zhǔn)庫",它能自動鏈接到你的程序中。好處在于當(dāng)你編譯程序時,你不需要每次都重新編譯庫。大多數(shù)情況下,庫不會改變,因此沒有理由重新編譯它。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: