C++過載運算子及
阿新 • • 發佈:2019-01-29
先看下操作過載的定義和要求:
要進行操作符過載首先要求是自定義型別的運算
2、不能為內建型別定義其他的操作符
3、操作符過載不能改變操作符的優先順序
4、運算元個數不能改變
要進行操作符過載首先要求是自定義型別的運算
寫法格式:返回值 operator運算子(引數列表){}
過載的要求:
2、不能為內建型別定義其他的操作符
3、操作符過載不能改變操作符的優先順序
4、運算元個數不能改變
過載運算子時,函式宣告在類內和類外是有區別的,比方說+-*/等需要2個運算元的運算子,
當宣告在類的外部時,則引數列表為2個引數,第一個引數為運算子左邊的運算元,而第二個引數為
操作符右邊的運算元:如下
classType operator+(classType& left, classType& right);
而當函式宣告在類的內部時,即為類的成員函式時,
classType operator+(classType& right );
而第一個運算元就是呼叫該操作符的物件的引用,第二個運算元是傳進來的引數,
所以,如果要過載<<運算子,一般寫法是這樣的
ostream& operator<<(ostream& os, const classType& obj);
則第一個引數是該運算子的第一個運算元,然而,卻不是類物件,
所以當該類運算子過載時寫在類的內部時,又為了訪問類內除public外的其它變數或函式,
則應當宣告為友元函式:
friend ostream& operator<<(ostream& os, const classType& obj);
所以,為什麼有些運算子的過載要宣告為友元函式,是類似的。