伊莉討論區

標題: operator << overloading problem [打印本頁]

作者: 刃丑    時間: 2011-7-28 09:09 PM     標題: operator << overloading problem

提示: 作者被禁止或刪除 內容自動屏蔽
作者: kaworucloud    時間: 2011-7-28 11:58 PM

  1. std::ostream operator <<(std::ostream &out);
複製代碼
你這樣子寫的話,意思變成要 overload class abc 的 operator<<
使用起來就像這樣
  1. abc instance;
  2. instance << ???;
複製代碼
並且 instance operator method 的參數只能有一個(因為左運算元必定是 instance 本身),所以你寫成 std::ostream abc::operator<<(std::ostream &out, asd &dsa) 的話會報錯

而你要的是 cout << ???;
但你又沒辦法去 overload cout 的 operator<<,所以你只能藉由 global overload operator<< 來達到目的
  1. std::ostream& operator<<( std::ostream& out, abc& dsa ){
  2.         out<<dsa.data[0]<<dsa.data[1]<<dsa.data[2]<<dsa.data[3];
  3.         return out;
  4. }
複製代碼
表示 overload 了當左運算元型別為 ostream,右運算元型別為 abc 時的 operator<<
注意這個 operator<< 並不在 abc:: 底下

不過上述的做法還有個問題
abc 中的 data 存取權限是 private,compiler 一樣會報錯
因此必須在 abc 中聲明剛剛寫的 global overload operator<< 為 friend method
被聲明為 friend 的函式表示該函式可以存取自己的 private 成員
  1. class abc
  2. {
  3.     friend std::ostream& operator<<( std::ostream& out, abc& dsa );
  4. }
複製代碼
最後,return 的物件型別是 ostream&,不是 ostream
少了 & 表示你會回傳一份 cout 的 copy
而這是不行的,因為 ostream 的 base class 中有 private copy constructor
作者: 刃丑    時間: 2011-8-3 12:25 AM

提示: 作者被禁止或刪除 內容自動屏蔽




歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!