在C++包含很多運算符,但以下幾個運算符不能由用戶定義:
::(作用域解析;)
,(成員選擇)
.* (通過到成員的指針做成員選擇)
?:三元條件運算符
sizeof和typeid
運算符函數的名字是由關鍵字operator後跟對應的運算符構成的;例如operator<<。運算符函數的定義和使用都可以像其他函數一樣。使用運算符不過是顯示調用運算符函數的一種簡寫形式。例如 void f(complex a,complex b)
{
complex c=a+b; //簡寫
complex d=a.operator+(b);//顯示調用
}
一個運算符函數必須或者是一個成員函數,或者至少有一個用戶定義類型的參數(重新定義運算符new和delete的函數則沒有此項要求)。這一規則就保證了用戶不能改變原有表達式的意義,除非表達式中包含有用戶定義類型的對象。特別的,不能定義只對指針進行操作的運算符函數。
忠告:
1.定義運算符主要是為了模仿習慣使用方式
2.對於大型運算對象,請使用const引用參數類型
3.對於需要訪問表示的操作,優先考慮作為成員函數而不是作為非成員函數
4.對於對稱的運算符采用非成員函數
5.將只有一個“大小參數”的構造函數做成explicit
運算符重載的內容應該還是挺多的,但卻不知道如何寫,看來還是文筆太差了,有機會再補上吧。