針對:ostream & operator
說明幾點:
1.第一個形參為對ostream物件的引用,在該物件上將產生輸出,ostream為非const,因為寫入到流會改變流的狀態;該形參是一個引用,因為不能複製ostream物件(在c++中定義的標準輸入輸出流類istream和ostream,其中複製建構函式和賦值運算子函式都被放置在了private部分,且只有宣告,沒有定義)。
2.第二個形參一般應是對要輸出的類型別的引用,該形參是一個引用以避免複製實參,減少一次複製;它設為const,因為輸出一般不會改變該物件,設為const就可以用來輸出const物件和非const物件。
3.返回型別是一個ostream引用,它的值通常是輸出運算子所操作的ostream物件,首先因為ostream物件不能複製,所以必須是引用;其次引用可以少一次複製,提高效率;最後,為了體現連續性,實現連續輸出,達到用多個輸出運算子操作一個ostream物件的效果,如果不是引用,程式返回的時候就會生成新的臨時物件,也就是說,連續的兩個
PS: 過載賦值運算子,連續賦值可以不返回引用
過載加法運算子,連續相加不能返回引用
針對:ostream & operator
說明幾點:
1.第一個形參為對ostream物件的引用,在該物件上將產生輸出,ostream為非const,因為寫入到流會改變流的狀態;該形參是一個引用,因為不能複製ostream物件(在c++中定義的標準輸入輸出流類istream和ostream,其中複製建構函式和賦值運算子函式都被放置在了private部分,且只有宣告,沒有定義)。
2.第二個形參一般應是對要輸出的類型別的引用,該形參是一個引用以避免複製實參,減少一次複製;它設為const,因為輸出一般不會改變該物件,設為const就可以用來輸出const物件和非const物件。
3.返回型別是一個ostream引用,它的值通常是輸出運算子所操作的ostream物件,首先因為ostream物件不能複製,所以必須是引用;其次引用可以少一次複製,提高效率;最後,為了體現連續性,實現連續輸出,達到用多個輸出運算子操作一個ostream物件的效果,如果不是引用,程式返回的時候就會生成新的臨時物件,也就是說,連續的兩個
PS: 過載賦值運算子,連續賦值可以不返回引用
過載加法運算子,連續相加不能返回引用