c 運算子過載筆記

2021-09-24 18:57:06 字數 1544 閱讀 3296

1.運算子過載的六個注意事項:

(1).過載運算子函式的引數個數,應該與參與這個運算子的運算物件數量一樣多,但是如果是成員函式,則引數數量要少乙個,因為第乙個引數是this。例如:

#includeusing namespace std;

class test

;int operator+(const test &v1,const test &v2)

int main()

(2).運算子過載函式的引數至少要有乙個類的成員(或者類型別)作為引數,而不能都是內建型別(會導致編譯錯誤)。例如int operator+(int, int)是不行的,因為int是內建型別。內建型別的操作符明顯是不能過載的,比如過載了int型的+運算子,那程式其他地方的int加法都會使用過載的函式,這明顯是不行的。

(3).運算子可以像普通函式一樣呼叫。

(4).有些運算子是不適合過載的;(,、&、&&、||等)。

(5).必須作為成員函式的過載運算子:=、、()、->,否則會編譯錯誤。

(6).過載運算子函式是成員函式時,其實就是運算子左側的物件呼叫的這個運算子,所以左側物件必須是運算子所屬類的乙個物件。

2.輸入輸出運算子過載:

(1).「<<」和「>>」表示移位操作,在io標準庫(iostream庫)過載了這兩個運算子來處理輸入和輸出,自己過載這兩個運算子的目的就是要用在輸出自定義的類的時候。

(2).如果要與iostream庫相容輸入輸出操作,則自己過載的時候必須作為非成員函式,這個是因為如果作為成員函式,則左側的操作物件應該是這個類的物件,這樣就不能相容iostream庫的輸入輸出操作。當然非要過載為成員函式,也是可以編譯通過的,只不過是不能相容標準庫iostream的輸入輸出操作而已。

(3).因為io運算子通常要訪問類的所有成員,所以一般是把過載的非成員函式宣告為類的友元函式。

3.遞增遞減運算子過載

(1).遞增和遞減一般是改變物件的狀態,所以一般是過載為成員函式。

(2).過載遞增遞減,一定要和指標的遞增遞減區分開。因為這裡的過載操作的是物件,而不是指標(由於指標是內建型別,指標的遞增遞減是無法過載的),所以一般情況的遞增遞減是操作物件內部的成員變數。

(3).遞增和遞減分為前置和後置情況,a = ++b;(前置), a = b++;(後置)。因為符號一樣,所以給後置版本加乙個int形參作為區分,這個形參是0,但是在函式體中是用不到的,只是為了區分前置後置。例如:

#include#include#include#intcludeusing namespace std;

class test

//後置遞增就是增加當前物件的pos的值,並且返回增加pos之前的該物件(遞增之前的物件)

test operator++(int)

};int main()

class test

void operator()(const string &str)

};int main()

c 運算子過載筆記

運算子過載的概念 給原有的運算子賦予新的功能 比如 不僅可以做算術運算也可以連線倆個字串 一元運算子 只與乙個運算元進行運算 比如 正負號 運算子過載的本質是 函式過載。與 符號只能通過友元函式來過載 因為其返回的物件是i ostream中的 索引運算子只能通過成員函式進行過載,不能使用友元函式進行...

運算子過載筆記

建立臨時物件 將自加後的物件賦給另乙個物件,我們需要建立乙個臨時物件,然後返回該物件 include using namespace std class num num int get const void set int x num operator private int n int main ...

運算子過載筆記

1.不能用友元過載的運算子 原因有2種說法 1 operator 時可以將友元函式宣告和類分開放,那麼在這個operator 函式之前的 遇到 號就是預設的 操作符,在operator 之後的 用的就是這個過載的operator 造成了混亂.2 作為成員函式過載時,呼叫物件就是第乙個引數,比如 作為...