- 最後登錄
- 2022-10-28
- 在線時間
- 361 小時
- 註冊時間
- 2010-2-3
- 閱讀權限
- 30
- 精華
- 0
- UID
- 7563378
- 帖子
- 722
- 積分
- 2721 點
- 潛水值
- 16557 米
| 如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。 - std::ostream operator <<(std::ostream &out);
複製代碼 你這樣子寫的話,意思變成要 overload class abc 的 operator<<
使用起來就像這樣- abc instance;
- instance << ???;
複製代碼 並且 instance operator method 的參數只能有一個(因為左運算元必定是 instance 本身),所以你寫成 std::ostream abc::operator<<(std::ostream &out, asd &dsa) 的話會報錯
而你要的是 cout << ???;
但你又沒辦法去 overload cout 的 operator<<,所以你只能藉由 global overload operator<< 來達到目的- std::ostream& operator<<( std::ostream& out, abc& dsa ){
- out<<dsa.data[0]<<dsa.data[1]<<dsa.data[2]<<dsa.data[3];
- return out;
- }
複製代碼 表示 overload 了當左運算元型別為 ostream,右運算元型別為 abc 時的 operator<<
注意這個 operator<< 並不在 abc:: 底下
不過上述的做法還有個問題
abc 中的 data 存取權限是 private,compiler 一樣會報錯
因此必須在 abc 中聲明剛剛寫的 global overload operator<< 為 friend method
被聲明為 friend 的函式表示該函式可以存取自己的 private 成員- class abc
- {
- friend std::ostream& operator<<( std::ostream& out, abc& dsa );
- }
複製代碼 最後,return 的物件型別是 ostream&,不是 ostream
少了 & 表示你會回傳一份 cout 的 copy
而這是不行的,因為 ostream 的 base class 中有 private copy constructor... |
|