過載之運算子過載

2021-07-11 09:56:30 字數 1377 閱讀 9369

運算子過載,就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別

。運算子過載的宣告方式與方法的宣告方式相同,但operator關鍵字告訴編譯器,它實際上是乙個運算子過載,後面是相關運算子的符號,在本例中就是+。返回型別是在使用這個運算子時獲得的型別。在本例中,把兩個向量加起來會得到另乙個向量,所以返回型別就是vector。對於這個+運算子過載,返回型別與包含類一樣,但這種情況並不是必需的。兩個引數就是要操作的物件。對於二元運算子(帶兩個引數),如+和-運算子,第乙個引數是放在運算子左邊的值,第二個引數是放在運算子右邊的值。

c++要求所有的運算子過載都宣告為public和static,這表示它們與它們的類或結構相關聯,而不是與例項相關聯,所以運算子過載的**體不能訪問非靜態類成員,也不能訪問this識別符號;這是可以的,因為引數提供了運算子執行任務所需要知道的所有資料。

運算子過載的方法:

運算子的過載是通過定義函式實現來完成的,實際上就是,函式的過載。

過載運算子函式的一般形式:函式型別 operator 運算子名稱(形參表列)

complex operator + (complex &,complex&)

complex operator < (complex &)

..........

過載運算子的規則:

<1>c++不允許使用者自己定義新的運算子,只能對已有的c++運算子進行過載。

<2>過載不能改變運算子物件的優先順序

<3>過載不能改變運算子物件(即運算元)的個數;

<4>不能改變運算子的結合性

<5>過載的運算子的函式不能有預設的引數

<6>過載的運算子必須和使用者定義的自定義型別的物件一起使用,其引數至少應有乙個類物件。

運算子過載分為(1)過載雙目運算子(2)過載單目運算子(3)過載流插入運算子和流提取運算子

下面我們來進行一下過載雙目運算子:

#includeusing namespace std;

class complex

complex(int r,int i):real(r),imag(i){}

friend complex operator + (complex &,complex &);

void dislay();

private:

int real;

int imag;

}; complex operator + (complex &c1,complex &c2)

void complex::dislay()

{ cout<

運算子過載之過載型別運算子

普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...

C 運算子過載之過載單目運算子

單目運算子只有乙個運算元,但是其過載方法類似於雙目運算子,在這裡以過載單目運算子 為例,介紹單目運算子的過載 注意 和 運算子有兩種使用方式,前置自增運算子和後置自增運算子,它們的作用是不一樣的,為了區分他們,c 約定,在自增 自減 運算子過載函式中,增加乙個int型別的形參,就是後置自增 自減 運...

運算子過載 賦值運算子的過載

有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...