我正在测试一些与重载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以及>>
运算符的相似性。所以,我很想知道这有什么不同吗?
答案 0 :(得分:5)
区别很明显,/ os是输入/输出流,而cin / cout是标准输入/输出流。 cin / cout是i / o流的实例,而不是同义词。
关键是,除标准输入/输出之外还有其他流,例如文件,字符串流以及您可以想到的任何自定义实现。如果你在流媒体运营商中使用cin / cout,忽略他们应该读/写的流,那么你最终会得到
file_stream << some_student;
打印到标准输出,而不是打印到它应该的文件。