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

ipk*_*iss 2 c++ io overloading operators

我正在测试一些与重载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;
}
Run Code Online (Sandbox Code Playgroud)

然而,内部的<<>>,我可以使用:

 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;
}
Run Code Online (Sandbox Code Playgroud)

<<,我使用os对象而不是cout和>>运算符的相似性.所以,我很想知道这有什么不同吗?

K-b*_*llo 5

差别很明显,/ os是输入/输出流,而cin/cout是标准输入/输出流.cin/cout是i/o流的实例,而不是同义词.

关键是,除标准输入/输出之外还有其他流,例如文件,字符串流以及您可以想到的任何自定义实现.如果你在流媒体运营商中使用cin/cout,忽略他们应该读/写的流,那么你最终会得到

file_stream << some_student;
Run Code Online (Sandbox Code Playgroud)

打印到标准输出,而不是它应该的文件.