C++中的圓括號重載

来源:互联网 发布:数控铣床编程太阳图案 编辑:程序博客网 时间:2024/06/05 00:23

重載是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)則沒有問題。
圓括號的重載簡化了代碼量,但是在使用的時候要和構造函數區分開來。

博文說明

  1. 本博文爲作者根據自身之經驗所創作,限於作者水平,錯誤疏漏在所難免。如果您發現文章中有任何不合適的地方,歡迎與作者聯繫。
  2. 如果萬幸博文爲您認可,需要轉載或者其它操作,請與作者聯繫。
  3. 文章用正體中文書寫,但是沒有採用港澳臺等地的術語翻譯,主要是便於和大家交流。
原创粉丝点击