W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在第9章中,我們定義了Time結(jié)構(gòu)體并寫了一個printTime函數(shù)
struct Time {
int hour, minute;
double second;
}
void printTime(const Time& time) {
cout << time.hour << ":" << time.minute << ":" << time.second << endl;
}
要調(diào)用這個函數(shù),我們需要傳遞一個Time對象作為參數(shù)。
Time currentTime = { 9, 14, 30.0 };
printTime(currentTime);
為把printTime轉(zhuǎn)變?yōu)槌蓡T函數(shù),第一步要將函數(shù)名由printTime改成Time::print。::操作符使結(jié)構(gòu)體名字和函數(shù)名分離開,它們同樣表明print函數(shù)能在Time結(jié)構(gòu)體上調(diào)用。
下一步是消去參數(shù)。我們將在對象上調(diào)用這個函數(shù),而不是將對象作為實參傳遞給函數(shù)。
因此,在函數(shù)中,我們不再有一個time參數(shù),取而代之的是當(dāng)前對象,即函數(shù)在這個對象上調(diào)用??梢允褂肅++關(guān)鍵字this來引用當(dāng)前對象。
有一件難以理解的事情是,這里的this實際上是一個指向結(jié)構(gòu)的指針,而不是結(jié)構(gòu)本身。指針和引用類似,但現(xiàn)在我還不想討論指針使用的細(xì)節(jié)。我們現(xiàn)在唯一需要的指針操作符是*操作符,它把一個結(jié)構(gòu)體指針轉(zhuǎn)化成結(jié)構(gòu)體,在如下函數(shù)中,我們用它把this的值賦給局部變量time。
void Time::print() {
Time time = *this;
cout << time.hour << ":" << time.minute << ":" << time.second << endl;
}
當(dāng)我們把函數(shù)轉(zhuǎn)變成成員函數(shù)時,函數(shù)的前兩行改變了不少,但是請注意輸出語句完全沒有變化。
為了調(diào)用新版的print,我們需要在一個Time對象上調(diào)用它:
Time currentTime = { 9, 14, 30.0 };
currentTime.print();
轉(zhuǎn)變過程的最后一步是在結(jié)構(gòu)體定義中聲明這一函數(shù):
struct Time {
int hour, minute;
double second;
void Time::print ();
};
除了在行尾有一個分號以外,函數(shù)聲明看起來很像函數(shù)定義的第一行。聲明描述了函數(shù)的接口,也即參數(shù)數(shù)目和類型,以及返回值的類型。
聲明一個函數(shù)的同時,也是在向編譯器承諾你將在程序中提供函數(shù)定義。這里的定義有時也被稱為函數(shù)的實現(xiàn),因為它包含了函數(shù)工作的細(xì)節(jié)。如果你遺漏了定義,或者提供的函數(shù)的接口與你承諾的不同,編譯器會抗議的。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: