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