在c++中重载IO操作符时使用cout/cin
Use cout/cin when overloading IO Operators in C++?
我正在测试一些与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;
输出到标准输出,而不是输出到文件中。
相关文章:
- 为什么 printf 在 C++ 中的执行速度比 cout 快?另外scanf比cin慢,为什么?
- 使用 CIN COUT 显示垃圾值的文件对象?
- 当我们声明 cin 为 int 并从 cin 中获取输入并在 cout 中打印 cin 时会发生什么?
- 为什么我的 cout 一次执行,尽管 cin 应该在两者之间读取?
- 两个 cin / cout 语句合并为一个
- 防止 cin、cout、cerr 被实例化
- 无法让我了解 cin.get 和 cout 在这里的工作方式
- 使用 std::endl 与 "n" 当 cin 和 cout 被解绑时
- CIN 和 COUT 如何在以下程序中工作
- 使用自定义宏来简化 cin 和 cout 语句等内容被认为是更好还是更差
- 使用 CIN 和 COUT 在 C++ 中声明基本数据类型
- Cin和Cout在构造函数中
- 要求使用cout/cin进行有效输入
- cout/cin没有命名类型错误
- cout/cin 不读取或打印
- 为什么在这种情况下"printf scanf"比"cout cin"慢?
- 由于cout<<cin.rdbuf()导致的无限循环,为什么?
- 何时使用printf/scanf与cout/cin
- "<<" 和 ">>" 在 cout/cin 的C++中是什么意思?
- 在c++中重载IO操作符时使用cout/cin