天天看點

重載運算符作為成員函數還是非成員函數

一、定義為成員函數的運算符

1. 指派、調用、下标、成員通路箭頭運算符(=、()、[]、->)

2. 改變對象狀态的運算符或者與給定類型密切相關的運算符(遞增++、遞減--、解引用*)

3. 複合指派運算符(注:它也可以定義為非成員函數)

二、定義為非成員函數的運算符

1. 具有對稱性的,即能轉換任意一端的運算對象的運算符(算術、相等性、關系、位運算符) 

2. 輸入輸出運算符

三、為什麼一定要定義為成員函數

string s;
// 指派運算符=是string的成員函數
s = "world";	// 正确 
"world" = s;	// 錯誤