C 操作符過載

2021-07-27 17:59:53 字數 1407 閱讀 4030

為什麼需要對操作符進行過載?對於編譯器提供的操作符,一般情況下,只支援基本資料型別和標準庫中提供的class,對於使用者自己定義的class,如果想支援基本操作,比如比較大小,判斷是否相等,等等,則需要使用者自己來定義關於這個操作符的具體實現。比如,判斷兩個人是否一樣大,我們預設的規則是按照其年齡來比較,所以,在設計person 這個class的時候,我們需要考慮操作符==,而且,根據剛才的分析,比較的依據應該是age。那麼為什麼叫過載呢?這是因為,在編譯器實現的時候,已經為我們提供了這個操作符的基本資料型別實現版本,但是現在他的運算元變成了使用者定義的資料型別class,所以,需要使用者自己來提供該引數版本的實現。

操作符過載有兩種方式,一種是借助類成員函式實現。另一種是借助全域性函式實現。

操作符過載的本質是函式,定義格式如下:

返回值 operator 操作符 (左運算元, 右運算元)
其中需要注意的是,對於返回值和左右運算元能用引用時盡量用引用。如果需要被過載的操作符支援鏈式程式設計,如<<、=,那麼返回值需要是乙個引用。

下面通過定義乙個陣列類,來過載、=、==、!= 操作符。

標頭檔案.h

#ifndef _array_h_

#define _array_h_

class array

;#endif

.cpp檔案

#include 

#include "array.h"

array::array(int length)

mlength = length;

space = new

int[mlength];

}array::array(array &obj)

}int array::getdata(int index)

int array::length()

void array::setdata(int index, int

value)

this->space[index] = value;

}array::~array()

}//過載=操作符

array& array::operator=(array &obj)

return *this;

}//過載操作符

int& array::operator(int i)

//過載==操作符

bool array::operator==(array &a1)

for (i = 0; i < this->mlength; i++)

}return

true;

}//過載!=操作符

bool array::operator!=(array &obj)//注重**的復用性

C 操作符過載

1.作為成員過載 class myclass public myclass operator const myclass d cons friend myclass operator const myclass a1,const myclass a2 關於返回值型別的討論 呼叫者堆疊裡返回乙個物件效...

C 過載操作符

過載操作符 一 過載操作符的定義 1.過載操作符的結構 返回型別 operator 需要過載的操作符 形參列表 注意 形引數目應和運算元數目相同。2.過載操作符的幾條注意事項 1 過載的操作符名不能通過連線其他合法符號來建立任何新的操作符。如 2 過載操作符必須具備至少乙個類型別或列舉型別的運算元。...

c 操作符過載

過載操作符 一 限制 1 不能增加新的操作符 2 有些操作符不能過載,如.物件中的訪問成員 作用域解析操作符 sizeof 三元操作符 3 不能改變操作符的元數,元數是指與操作符相關的引數或運算元個數。比如一元操作符 只能應用於乙個操作符 4 不能改變操作符的優先順序 5 不能重新定義內建型別的操作...