運算符重載實質上是函數的重載
重載運算符的函數一般格式如下:
函數類型 operator 運算符名稱 (形參表列)
{對運算符的重載處理}
例如,想將“+”用于Complex(復數)的加法運算,函數的原型可以是這樣的:
注意:函數名是由operator和運算符組成。
上面的operator+就是函數名,意思是“對運算符+重載“。只要掌握這點,這可以發現,這類函數和其他函數在形式上沒有什么區別。
兩個形參是Complex類對象的引用,要求實參為Complex類對象。
在定義了重載運算符后,可以說:函數operator+重載了運算符+。
在執行復數相加的表達式c1+c2時(假設c1+c2都已被定義為Complex),系統就會調用operator+函數,把c1+c2作為實參,與形參進行虛實結合。
為了說明把運算符重載后,執行表達式就是調用函數的過程,可以把兩個整數相加也想象稱為調用下面的函數:
=====================示例代碼1.1==================================
分析:
在main函數中,“c3=c1+c2;”在將運算符+重載為類的成員函數后,C++編譯系統將程序中的表達式c1+c2解釋為:
c1.operator+(c2);//其中c1+c2是Complex類的對象
即以c2為實參調用c1的運算符重載函數operator+(Complex & c2),進行求值,得到兩個復數之和。上面的“operator+”是一個函數名,它是類Complex的成員函數。
在實際工作中,類的聲明和類的使用往往是分離的。假如在聲明Complex類時,對運算符+,-,*,/都進行了重載,那么使用這個類的用戶在編程時可以完全不考慮函數是怎么實現的,
放心大膽地直接使用+,-,*,/進行復數的運算即可,顯然十分方便。
對上面的運算符重載函數operator +還可以改寫的更簡練一些:
在建立臨時對象過程中,調用構造函數。return語句將此臨時對象作為函數返回值。
那么,我們將+運算符進行了重載以后,可否將一個常量和一個復數相加呢?比如:
應寫成對象形式,如:
例如,運算符+被重載以后,仍然可以用于int,float,double,char類型數據的運算,同時又增加了用于復數相加的功能。
編譯系統根據表達式的上下文,即根據運算符兩側(如果是單目運算符則為一側)的數據類型決定的。
如,對于3+5,則執行整數加法;對于3.4+5.45,則執行雙精度數加法;對于兩個復數類相加,則執行復數加法。
新聞熱點
疑難解答
圖片精選