C++:運算符重載函數


                  5.運算符重載

5.1 在類外定義的運算符重載函數

C++為運算符重載提供了一種方法,即在運行運算符重載時,必須定義一個運算符重載函數,
其名字為operator,后隨一個要重載的運算符。例如,要重載"+"號,應該寫一個名字為operator
的函數,其他的運算符也是如此。
函數 功能
operator+ 加法
operator- 減法
operator* 乘法
operator< 小於

因此,若要兩個對象相加,需要先定義一個運算符重載函數operator+,例如:

class Complex{
   public:
     double real,imag;
     Complex(double r=0;doubble i=0)
     {
      real = r;
      imag = i;
     } 
}; 
 Complex operator+(Complex om1,Complex om2)
 {
   Complex temp;
   temp.real = om1.real+om2.real;
   temp.imag = om1.imag+om2.imag;
   return temp;
 }        

這樣,就可以方便使用語句:

 int main()
   {
     Complex com1(1.1,2.2),com2(3.3,4.4),total;
   //total = com1+com2;
   //total = operator+(com1,com2);
     return 0; 
   }
   //上述兩個注釋語句是等價的,顯然前者更簡單明了。

//例5.1 兩個Complex類對象相加的完整程序

#include<iostream>
using namespace std;
 class Complex{
   public:
     double real,imag;
     Complex(double r=0,double i=0)
     {
      real = r;
      imag = i;
     } 
}; 
 Complex operator+(Complex om1,Complex om2)  //定義運算符+的重載函數 
 {
   Complex temp;
   temp.real = om1.real+om2.real;
   temp.imag = om1.imag+om2.imag;
   return temp;
 }
int main(int argc, char** agrv)
{
  Complex com1(1.1,2.2),com2(3.3,4.4),total1,total2;
  total1 = com1+com2;                  //調用運算符重載函數operator的第一種方式  
  cout<<"total1.real="<<total1.real<<","<<"total1.imag="<<total1.imag<<endl;
  total2 = operator+(com1,com2);     //調用運算符重載函數operator的第二種方式
  cout<<"total2.real="<<total2.real<<","<<"total2.imag="<<total2.imag<<endl;
  return 0; 
}

C++對運算符重載指定如下一些規則:

(1)不允許重載的運算符有:
.(成員訪問運算符) .*(成員指針訪問運算符) ::(作用域符) Sizeof(長度運算符) ?:(條件運算符)

(2)不允許用戶定義新的運算符作為重載運算符

(3)重載的功能應當與原有的功能相類似(+就是實現加法,-就是實現減法)

(4)重載不能改變運算符的操作對象(即操作數)。例如,"+"就是一個雙目運算符(即只能代兩個操作數),重載后仍為雙目運算符,需要兩個參數。


(5)重載不能改變運算符原有的優先級。但是可以采用加"()"的辦法進行強制轉換。

(6)重載不能改變運算符原有的結合特性.例如,乘除法運算符都是從左往右結合的.必要時,可以采用加"()"的辦法

(7)運算符重載函數的參數至少應有一個是類對象(或類對象的引用)。也就是說,運算符重載函數的參數不能全是C++的標准型(基本數據類型)。目的是:防止用戶修改標准類型數據的運算符性質。 

(8)運算符重載函數可以是普通函數,也可以是類的成員函數,還可以是類的友元函數。

(9)一般而言,用於類對象的運算符必須重載,但是賦值運算符"="除外,不必用戶進行重載,系統已經為每一個新聲明的類重載了一個賦值運算符函數,它的作是逐個復制類的數據成員,可以直接用於對象之間的賦值,用戶不必自己編寫運算符重載函數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM