Использовать cout / cin при перегрузке операторов ввода-вывода в C ++? - PullRequest
2 голосов
/ 12 сентября 2011

Я тестирую некоторый код C ++, связанный с перегрузкой операторов ввода-вывода.Код выглядит следующим образом:

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 и сходство для >> оператора.Итак, мне любопытно узнать, есть ли какая-то разница?

1 Ответ

5 голосов
/ 12 сентября 2011

Разница очевидна: / os - это потоки ввода / вывода, а cin / cout - стандартные потоки ввода / вывода.cin / cout - это экземпляры потоков ввода-вывода, а не синонимов.

Дело в том, что существуют потоки, отличные от стандартного ввода / вывода, такие как файлы, строковые потоки и любая другая пользовательская реализация, о которой вы только можете подумать.Если вы используете cin / cout в своих потоковых операторах, игнорируя поток, в который они должны читать / записывать, вы получите

file_stream << some_student;

печать на стандартный вывод, а не в файл, где егодолжен.

...