C++中的圓括號重載

重載是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. 文章用正體中文書寫,但是沒有採用港澳臺等地的術語翻譯,主要是便於和大家交流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值