1. 程式人生 > >重載運算符作為成員函數還是非成員函數

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

block 為什麽 復合賦值運算符 位運算符 color 相等 訪問 必須 非成員函數

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

1. 賦值、調用、下標、成員訪問箭頭運算符(=、()、[]、->)

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

3. 復合賦值運算符(註:它也可以定義為非成員函數)

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

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

2. 輸入輸出運算符

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

把運算符定義為成員函數時,該運算符的左側運算對象必須是運算符所屬類的一個對象。

如:

string s;
// 賦值運算符=是string的成員函數 s = "world"; // 正確 "world" = s; // 錯誤

  

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