1. 程式人生 > >C++過載運算子及

C++過載運算子及

先看下操作過載的定義和要求:
要進行操作符過載首先要求是自定義型別的運算

寫法格式:返回值 operator運算子(引數列表){}

過載的要求:

1、內建型別的操作符不能被過載
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);



所以,為什麼有些運算子的過載要宣告為友元函式,是類似的。