C++ 重載

2023-03-20 15:52 更新

前面幾節(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)地改變了。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)