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