2011-09-12 44 views
2

我正在測試一些與重載IO操作符相關的C++代碼。作爲代碼如下:在C++中重載IO操作符時使用cout/cin?

class Student { 
private: 
    int no; 
public: 
    Student(int n) 
    { 
     this->no = n; 
    } 
    int getNo() const { 
     return this->no; 
    } 
    friend istream& operator>>(istream& is, Student& s); 
    friend ostream& operator<<(ostream& os, const Student& s); 
}; 
ostream& operator<<(ostream& os, const Student& s){ 
    cout << s.getNo(); // use cout instead of os 
    return os; 
} 
istream& operator>>(istream& is, Student& s) 
{ 
    cin >> s.no; // use cin instead of is 
    return is; 
} 

然而,<<>>內,我可以使用:

ostream& operator<<(ostream& os, const Student& s){ 
    os << s.getNo(); // use os instead of cout 
    return os; 
} 
istream& operator>>(istream& is, Student& s) 
{ 
    is >> s.no; // use is instead of cin 
    return is; 
} 

<<,我使用OS對象,而不是cout和爲操作者>>的相似性。所以,我很想知道這是否有什麼不同?

回答

5

區別很明顯,/ os是輸入/輸出流,而cin/cout是標準輸入/輸出流。 cin/cout是I/O流的實例,而不是同義詞。

問題是,除了標準輸入/輸出之外,還有一些流,例如文件,字符串流以及您可以想到的任何自定義實現。如果您使用CIN/COUT在您的流運營商,忽略了流,他們應該讀/寫,然後你會

file_stream << some_student; 

打印結束到標準輸出,而不是到了應該文件。

+0

標準輸入/輸出流是什麼意思?他們是那些「在計算機程序及其環境(通常是文本終端)開始執行時預連接輸入和輸出通道」(http://en.wikipedia.org/wiki/Standard_streams)? – ipkiss

+0

關於權利的聲音,yeap。 –

+0

現在很清楚。非常感謝。 – ipkiss