C 運算子過載總結(真的很詳細了w w)

2022-03-16 21:48:34 字數 3374 閱讀 9028

運算子過載可以使得一些特殊型別參與運算,我是這樣理解的。

//一般形式

class x;

返回型別 operator 運算子(形參表)

{}

所以加減乘除就可以這樣來進行宣告了

返回型別 operator +(-、*、/) (形參表);
- & ! ++(前),++(後)等。下面以++(後)來進行乙個示例:

class code;

code operator++(code& op, int)//第二個引數僅僅表示這個++是字尾加

總結:

運算子過載可以返回任何型別,甚至是void型別,但是通常都是返回和運算元相同的型別。

下面運算子只能使用成員函式運算子過載,不能使用友元函式來過載。

運算子名稱

=

等號

下標運算子

()

函式呼叫運算子

->

指標成員運算子

對於同乙個運算子,可以寫多個函式來進行過載。

//一般形式

class x

返回型別 x::operator 運算子(參數列)

這裡需要注意的是:參數列中的個數會少乙個,因為左運算元是隱含在this中的。

但是類內的靜態函式沒有this指標。

例如:

class code

code operator+(code p)

};code a(1, 2), b(3, 4);

code c=a+b;//這時c.x=4, c.y=6;

形式和上面差不多,這裡不再贅述。

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

絕大多數運算子都能過載,但是有例外,下面五個不能進行過載

名稱.

成員訪問運算子

.*

成員指標訪問運算子

::

作用域運算子

sizeof

長度運算子

?:

條件運算子

過載的功能應當和原有的功能類似

過載不能改變運算子的操作物件

過載不能改變運算子原有的優先順序

過載不能改變運算子原有的結合特性

過載引數應該至少有乙個是類物件,不能都是c++預定義的型別(要不然就沒有意義了)

雙目運算子一般兩種過載形式都可以,但是有的時候只能用友元形式來進行過載。例如:

ab::operator+(int x)

ob1=ob2+100; //這裡這樣呼叫是可以的,編譯器理解為ob1=ob2.operator(100);

//但是下面的情況就會出現問題

ob1=100+ob2; //等價於ob1=100.operator(ob2);但是100不是乙個物件

如果我們定義下面兩個友元函式就會很好的解決這個問題

friend ab operator+(ab ob, int x);

friend ab operator+(int x, ab ob);

//這樣ob1=100+ob2; ob1=ob2+100;都沒有問題

//這裡我們也可以整合,使用型別轉換函式,將int型別轉換為物件型別,物件型別轉換為int型別,不過真沒啥意思

這裡我們過載=主要是進行深拷貝操作(當然這裡也可以自己寫乙個拷貝建構函式來進行)。

在過載等號運算子過載時要注意自己等於自己的情況

mystring& mystring::operator=(mystring &s)

只能使用成員函式進行過載,要注意這是個雙目運算子x[y],x是左操作符,y是右操作符**

返回型別 類名::operator (參數列)

//有時返回型別可以使用引用型別,只要不是返回的變數不是在函式內宣告的臨時變數就可以

class ab

int& ab::operator(int b)

只能使用成員函式進行過載

注意這裡()看被作雙目運算子的,x(y), x是左運算元,y是右運算元

//給出座標,返回二維矩陣的某個元素的值.

class matrix

int& matrix::operator()(int r, int c)

m(3, 5)//這裡解釋為m.operator()(3, 5);

()運算子是唯一乙個可帶多個右運算元的運算子函式

定義原型:需要注意成員函式形式和友元函式形式的區別,他們呼叫方式不相同

//成員函式型別,注意如果使用下面的型別,那麼呼叫的方式是:物件名《對於<<的引數詳解,《c++ primer中文版:第五版》\(494\)頁是這樣解釋的:

輸出運算子的第乙個形參是乙個非常量的ostream物件的引用。之所以ostream是非常量是因為向流寫入內容會改變其狀態;而該形參是因為我們無法複製乙個ostream物件。

第二個形參一般來說是乙個常量的引用,該常量是我們想要列印的類型別。第二個形參是引用的原因是我們希望避免賦值實參;而之所以該形參可以是常量是因為(通常情況下)列印物件不會改變物件的內容。

為了與其他輸出運算子保持一致,operator<<一般要返回它的ostream形參。

這裡的基本規則和上面過載輸出運算子差不多,需要多注意的是,輸入過程中要考慮到輸入可能失敗的情況。

c 運算子過載總結

目錄 1.一般運算子過載 2.關係運算子過載 3.邏輯運算子過載 4.單目運算子過載 5.自增減運算子過載 6.位運算子過載 7.賦值運算子過載 8.記憶體運算子過載 9.特殊運算子過載 10.總結c 的一大特性就是過載 overload 通過過載可以把功能相似的幾個函式合為乙個,使得程式更加簡潔 ...

C 運算子過載總結

c 的一大特性就是過載 overload 通過過載可以把功能相似的幾個函式合為乙個,使得程式更加簡潔 高效。在c 中不止函式可以過載,運算子也可以過載。由於一般資料型別間的運算子沒有過載的必要,所以運算子過載主要是物件導向之間的。1.一般運算子過載 在進行物件之間的運算時,程式會呼叫與運算子相對應的...

C 運算子過載總結

c 的一大特性就是過載 overload 通過過載可以把功能相似的幾個函式合為乙個,使得程式更加簡潔 高效。在c 中不止函式可以過載,運算子也可以過載。由於一般資料型別間的運算子沒有過載的必要,所以運算子過載主要是物件導向之間的。在進行物件之間的運算時,程式會呼叫與運算子相對應的函式進行處理,所以運...