C++ 重載

2023-03-20 15:52 更新

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號