C 中的運算子過載(一) 運算子過載的概念

2021-10-10 07:04:11 字數 1778 閱讀 3664

概述:

運算子過載,就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別。運算子過載(operator overloading)只是一種」語法上的方便」,也就是它只是另一種函式呼叫的方式,只是為了方便我們使用,運算子只能運算內建的資料型別,對於自定義的資料型別不能運算,所以我們可以過載運算子。

運算子過載的基本概念:

在 c++中,可以定義乙個處理類的新運算子。這種定義很像乙個普通的函式定義, 只是函式的名字由關鍵字operator及其緊跟的運算子組成。差別僅此而已。它像任何其他函式一樣也是乙個函式,當編譯器遇到適當的模式時,就會呼叫這個函式。

語法: 定義過載的運算子就像定義函式,只是該函式的名字是 operator@,這裡的@代表了被過載的運算子。

比如用****實現了乙個簡單類的成員相加

1,呼叫函式實現類成員相加:

#include

using

namespace std;

class

person

int age;

person my_add ( person &p2)};

/*person my_add (person &p1, person &p2)/*也可以使用全域性函式實現*/*/

void

test01()

intmain()

2,使用過載運算子實現自定義變數的相加

#include

using

namespace std;

class

person

int age;

person operator

+( person &p2)};

/*person operator+ (person &p1, person &p2)

*/void

test01()

intmain()

結果如下:

注:過載加號運算子的時候,全域性和類成員只能存在乙個,否則會報錯,如果有兩個operator+函式編譯器就不知道去呼叫哪個了。

運算子過載遇到友元

過載cout左移運算子**如下

#include

#include

using

namespace std;

class

person

private

:int age;};

ostream&

operator

<<

(ostream &cout , person& p1)

void

test01()

intmain()

上面可以看出,如果是全域性函式過載,需要傳兩個引數,正常來說,如果是類內函式過載是需要cout.operator<< (person &p)但是我們不方便去修改cout類的成員,所以我們只能使用全域性函式過載。

注:如果過載運算子函式想要去訪問私有許可權變數的時候,可以使用友元概念來實現,只需要宣告過載運算子函式是類的友元就可以了。

可以過載的運算子:

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

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

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

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

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

下面介紹類的賦值運算子 1.c 中物件的記憶體分配方式 在c 中,物件的例項在編譯的時候,就需要為其分配記憶體大小,因此,系統都是在stack上為其分配記憶體的。這一點和c 完全不同!千 萬記住 在c 中,所有類都是reference type,要建立類的實體,必須通過new在heap上為其分配空間...