伊莉討論區
標題:
operator << overloading problem
[打印本頁]
作者:
刃丑
時間:
2011-7-28 09:09 PM
標題:
operator << overloading problem
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
kaworucloud
時間:
2011-7-28 11:58 PM
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
作者:
刃丑
時間:
2011-8-3 12:25 AM
提示:
作者被禁止或刪除 內容自動屏蔽
歡迎光臨 伊莉討論區 (http://a401.file-static.com/)
Powered by Discuz!