C 重學 運算子過載

2021-09-29 02:39:35 字數 2049 閱讀 7750

() = -> * 只能通過成員函式過載

<< >> 只能通過全域性函式過載

不要過載&& || ,失去短路規則

成員函式實現過載

全域性函式實現

輸入/輸出運算子過載

friend ostream &

operator

<

<

( ostream &output,

const distance &d )

friend istream &

operator

>

>

( istream &input, distance &d )

++ 和 – 運算子過載注意:過載函式的返回值,引用和非引用的區別

過載字首遞增運算子( ++ ):

如果是非引用,那麼假如++(++time), 實際上的time只回增加一次

引用:第一次++後還是返回他自己

過載字尾遞增運算子( ++ )

返回臨時變數t的引用可能會出現問題。

// 過載字首遞增運算子( ++ )

time&

operator++(

)return

time

(hours, minutes);}

// 過載字尾遞增運算子( ++ )

// int 在 括號內是為了向編譯器說明這是乙個字尾形式,而不是表示整數。

time

operator++(

int)

// 返回舊的原始值

return t;

}

指標運算子過載(智慧型指標)用來託管自定義型別的物件, 讓物件進行自動釋放

#include

class

person

void

showage()

~person()

};class

smartpointer

// 過載-> 讓這個智慧型指標和person* p1一樣可以去使用成員函式

person*

operator

->()

// 過載*

person&

operator*(

)~smartpointer()

}};int

main()

賦值運算子過載乙個類會建立預設 構造,析構,拷貝構造,operator=

如果不重寫operator= / 拷貝構造,可能會出現深拷貝淺拷貝的問題

過載

返回引用才能做左值

int

&operator

(int i)

return arr[i]

;}

()過載仿函式

class

person};

personp2(

2);p2

();// 仿函式

myadd() 匿名物件

不要過載&& ||

會失去短路特性

臥薪嘗膽之JAVA重學(運算子)

算數運算子 二元運算子 一元運算子 賦值運算子 擴充套件運算子 關係運算子 instenceof 邏輯運算子 位運算子 條件運算子 字串連線符 屬於二元運算子 二元運算子 需要兩個運算元完成執行計算的計算符 例如 a b 運算規則 整數運算 如果兩個數中有乙個是long型別的話那麼 結果 也是lon...

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

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

C 運算子過載賦值運算子

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