重載是C++靜態多態性的實現,不僅可以對函數進行重載,還可以對運算符進行重載,其中對圓括號()的重載容易引起混淆:
- 對圓括號進行重載的時候,是可以有默認參數的,而其它運算符在重載的時候是沒有默認參數的。
- 對圓括號進行重載的時候,參數是放在圓括號裏面的。這點和加號(+)等運算符是不一樣的。
下面舉一個例子,定義一個box類,有x,y,z三個數據成員表示其長寬高,定義showvolume()函數顯示體積。
#include <iostream>
using namespace std;
class box{
public:
box(int _x=1,int _y=2 ,int _z=3)//構造函數,用於指定這個長方體的長寬高,並且設定默認值分別爲1,2,3
{
x=_x;
y=_y;
z=_z;
}
int showvolume()//顯示長方體的體積
{
cout<<"The volume is "<<x*y*z<<endl;
}
int operator()(int _x=4,int _y=5,int _z=6)//對圓括號進行重載
{
cout<<"using operator overload"<<endl;
x=_x;
y=_y;
z=_z;
return 0;
}
private:
int x;
int y;
int z;
};
int main() {
box box1(2,3,4);
box1.showvolume();//這個時候顯示的是24,默認設定
box1(1,1,1);//如果這裏沒有對圓括號進行重載,則會報錯。對於圓括號進行重載之後,可以繼續編譯,而且出現"using operator overload",表明已經調用圓括號的重載
box1.showvolume();//結果顯示爲1
return 0;
}
在對象申明的時候可以在對象名後面加上圓括號,寫入參數,此時調用的是構造函數。如果類沒有對圓括號進行重載,後面再使用對象名(),則編譯就會報錯。如上面的box1(1,1,1)就會報錯,定義圓括號重載之後,第二次調用box1(1,1,1)則沒有問題。
圓括號的重載簡化了代碼量,但是在使用的時候要和構造函數區分開來。
博文說明
- 本博文爲作者根據自身之經驗所創作,限於作者水平,錯誤疏漏在所難免。如果您發現文章中有任何不合適的地方,歡迎與作者聯繫。
- 如果萬幸博文爲您認可,需要轉載或者其它操作,請與作者聯繫。
- 文章用正體中文書寫,但是沒有採用港澳臺等地的術語翻譯,主要是便於和大家交流。