C 的運算子過載

2021-10-19 07:23:01 字數 1837 閱讀 2372

運算子過載顧名思義,就是對已知的運算子進行重新定義,除了相同名稱的宣告,它們的引數列表和定義(實現)不相同。

與其他函式一樣,過載運算子有乙個返回型別和乙個引數列表。

運算子過載有兩種方式:一種是類內過載(運算子過載函式作為類的成員函式),另一種是類外過載(運算子過載函式作為類的友元函式)

使用場景:函式呼叫運算子 () 可以被過載用於類的物件

作用:建立乙個可以傳遞任意數目引數的運算子函式

class

student

~student()

// 過載建構函式,直接對類成員進行操作

student operator()

(int a,

int b,

int c)

void

show()

private

: string m_name;

int m_age;

}int

main()

當有呼叫相同數量引數的時候是呼叫建構函式還是仿函式?

呼叫仿函式!

使用場景:

student s1(10

,10,10

), s2;

s2 = s1;

/*/*此處要注意student s2; student s2 = s1;和student s2 = s1;的區別

/*第乙個是先用無參建構函式(淺拷貝),第二個是拷貝建構函式(深拷貝)

*/

繼承是否:不能被繼承,因為每個過載運算子函式只能是用來處理自己的資料成員,不能處理其他類的資料成員。

有些難理解,我多寫一點蛤

首先要知道cout是輸出流,是ostream類中定義的乙個物件

可以這麼看

#include

ostream cout;

而且《也可以看做是ostream裡面的乙個已經是運算子過載的函式,單純的進行輸出,所以cout這個物件可以呼叫《這個函式

cout <<

"";

為什麼要類外過載呢?

因為如果在類內過載,對類進行輸出的時候就變成了p << cout,這看起來很彆扭啊!

所以在類內過載並且使用友元函式

#include

ostream&

operator()

(ostream& cout, student& s)

為什麼在在最後返回cout呢?可能大家有這個疑問。

因為假設已經例項化了乙個物件s

student s;

cout << s

請讀者一定要記住,在運算子過載裡面的cout絕對不是外面進行輸出的cout!

全過程是這樣的(我盡量寫的清楚些):

首先這個《是運算子過載自不必說,兩個引數,乙個是ostream& cout,student& s,其中cout這個物件是從ostream中例項化的物件,從頭檔案來的,並不是下面的cout 《中的cout,用這個物件進行初始化的《操作,即函式內的cout << s.m_name << s.m_age << endl;,則在外界,乙個<

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

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

C 運算子過載賦值運算子

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

C 運算子過載轉換運算子

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