c 運算子過載

2021-07-24 04:27:43 字數 1673 閱讀 2990

一、前言

過載運算子的目的是為了讓c++**變的更直觀、易讀,主要在類中定義,讓我們的類物件有著和普通變數一樣的操作,例如:「<<」輸出運算子,我們也希望類物件可以使用它,直接輸出一些有用資訊,這個時候就可以使用運算子過載。

二、運算子過載的規則

(1):運算子過載,不可改變運算順序和優先順序。但是引數和返回型別都可以重新說明的,過載的形式:

返回型別 operator 運算符號(引數列表)
(2):運算子過載中,如果引數均為內部型別,不可過載,例如:

int * operator + (int,int *);

既不可以:

int a=5;

int * pa=& a;

pa=pa+a; //error

(3):c++還規定,「.」「::」」.*「「.->」「?:」這五個運算子不可以過載。

三、過載形式

(1):類的成員函式

(2):類的友元函式

注意:

當運算子過載為成員函式的時候,函式引數比原運算元少乙個,友元函式時,引數個數和原運算元乙個樣。原因是因為成員函式可以直接訪問該成員函式所在類的私有資料成員,少的那個引數就是該類自己。因為友元函式對某個物件的資料進行操作,就必須通過該物件的名稱來進行,因此使用到的引數都要進行傳遞,運算元的個數就不會有變化。

四、過載為友元函式

前也說了,友元函式是沒有this指標的,所以在雙目運算子中需要兩個引數,在單目運算子是只需要乙個運算子即可。

#includeusing namespace std;

class a

friend a operator +(a&, a&); //過載「+」

friend a& operator ++(a&); //過載「++」

friend ostream & operator << (ostream &,const a &);//過載「<<」

};a operator + (a & a , a & a1)

a & operator ++(a & a)

ostream & operator <<(ostream & cout,const a & a)

int main()

五、過載為成員函式

#include

using

namespace

std;

class a

a operator +(a & c) //過載「+」

a& operator ++() //過載「++」

void

operator

<< (ostream &cout)//過載「<<」

};int main()

注意:c++規定:「=」「()」「」「->」必須為成員函式過載。

六、運算子過載函式的格式

參考部落格

C 運算子過載 過載特殊運算子

賦值運算子用於同類物件間的相互賦值。賦值運算子只能被過載為類的非靜態成員函式,不能過載為友元函式和普通函式。對於使用者自定義的類而言,如果沒有過載賦值運算子,那麼c 編譯器會為該類提供乙個預設的過載賦值運算子成員函式。預設賦值運算子的工作方式是按位對拷,將等到右邊物件的非靜態成員拷貝給等號左邊的物件...

C 運算子過載賦值運算子

自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。賦值運算子過載函式的定義與其它運算子過載函式的定義是...

C 運算子過載轉換運算子

為什麼需要轉換運算子?大家知道對於內建型別的資料我們可以通過強制轉換符的使用來轉換資料,例如 int 2.1f 自定義類也是型別,那麼自定義類的物件在很多情況下也需要支援此操作,c 提供了轉換運算子過載函式 它使得自定義類物件的強轉換成為可能。轉換運算子的生命方式比較特別,方法如下 operator...