W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
前面幾節(jié)你可能已經(jīng)注意到,fred和area兩個(gè)函數(shù)功能類(lèi)似,都是計(jì)算圓的面積,但參數(shù)不同。area函數(shù)需要提供半徑,而fred函數(shù)需要兩點(diǎn)的坐標(biāo)。
如果兩個(gè)函數(shù)做同樣的事情,給它們起相同的名字是很自然的。換句話說(shuō),fred也叫做area會(huì)更有意義。
重載是指存在多個(gè)同名函數(shù),只要每個(gè)函數(shù)接受的參數(shù)不同,在C++中就是合法的。所以我們可以再進(jìn)一步,重命名fred函數(shù):
double area (double xc, double yc, double xp, double yp) {
return area (distance (xc, yc, xp, yp));
}
看起來(lái)這像個(gè)遞歸函數(shù),其實(shí)不然,實(shí)際上這一版本的area函數(shù)在調(diào)用另一個(gè)版本的area函數(shù)。調(diào)用重載函數(shù)時(shí),C++可以通過(guò)調(diào)用者提供的參數(shù)來(lái)來(lái)確定要調(diào)用的版本。比如:
double x = area (3.0);
C++會(huì)尋找名為area且以一個(gè)double值為參數(shù)的函數(shù),所以這里使用的是area的第一個(gè)版本。而對(duì)于下面語(yǔ)句:
double x = area (1.0, 2.0, 4.0, 6.0);
C++會(huì)使用area的第二個(gè)版本。
很多內(nèi)置的C++命令都是已經(jīng)重載的,也就是說(shuō)有不同的版本用以接受不同數(shù)目或不同類(lèi)型的參數(shù)。
雖然重載是很有用的特性,但使用時(shí)一定要小心。使用不當(dāng)可能讓自己都迷惑了,比如你想調(diào)試重載函數(shù)的一個(gè)版本,卻意外地調(diào)用了另一個(gè)版本。
實(shí)際上,這提醒了我調(diào)試的一個(gè)基本規(guī)則:一定要確認(rèn)你正在看的程序版本和就是正在運(yùn)行的版本!有時(shí)你可能會(huì)發(fā)現(xiàn)你一點(diǎn)點(diǎn)的修改程序,可是每次程序運(yùn)行后輸出都是一樣的。這是一個(gè)警告信號(hào),因?yàn)檫\(yùn)行的程序版本并不是你想象的那個(gè)。為了證明無(wú)誤,每次修改代碼時(shí),貼上一行輸出語(yǔ)句(輸出什么并不重要),以此確認(rèn)程序的行為確實(shí)相應(yīng)地改變了。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: