在c++中重载IO操作符时使用cout/cin

Use cout/cin when overloading IO Operators in C++?

本文关键字:cout cin 操作符 c++ 重载 IO      更新时间:2023-10-16

我正在测试一些与IO操作符重载相关的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和>>操作符的相似性。所以,我很想知道这两者有什么区别吗?

区别很明显,is/o是输入/输出流,而cin/cout是标准的输入/输出流。Cin/cout是I/O流的实例,而不是同义词。

关键在于,除了标准输入/输出,还有其他流,比如文件、字符串流和任何你能想到的自定义实现。如果你在流操作符中使用cin/cout,忽略它们应该读/写的流,那么你最终会得到

file_stream << some_student;

输出到标准输出,而不是输出到文件中。