操作符重載的實現方式有兩種,即通過“友元函數”或者“類成員函數”。
(friend)返回類型 operator 操作符(形參表)
利用友元函數重載二元操作符”-“時,形式參數是兩個,而利用類成員函數時,形式參數卻只有一個。這時因爲類成員函數中存在this指針,這相當於一個參數,所以類成員實現操作符重載需要的形式參數比原來少一個。也正是因爲這個原因,友元函數實現的操作符重載是有限制的,比如:[] ,(),->和 =不能利用友元函數實現運算符的重載。
在實際開發過程中,單目運算符建議重載爲成員函數,而雙目運算符建議重載爲友元函數。通常下雙目運算符重載爲友元函數比重載爲成員函數更方便,但是有時雙目運算符必須重載爲成員函數,例如賦值運算符=。
運算符重載遵循原則:
(1)C++中只能對已有的C++運算符進行重載,不允許用戶自己定義新的運算符。
(2)C++中絕大部分的運算符可重載,除了成員訪問運算符.,作用域運算符::,長度運算符sizeof以及條件運算符?:。
(3)運算符重載後不能改變運算符的操作對象(操作數)的個數。如:"+"是實現兩個操作數的運算符,重載後仍然爲雙目運算符。
(4)重載不能改變運算符原有的優先級和原有的結合性。
(5)運算符重載不能全部是C++中預定義的基本數據,這樣做的目的是爲了防止用戶修改用於基本類型數據的運算符性質。