本文主要是介绍深入理解 C++ 中的 IO 流【iostream篇】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
C++ 中的输入输出流(iostream)是非常重要的一部分,它们提供了与用户交互以及与文件系统进行数据交换的功能。本文将深入探讨 C++ 中的 cin
和 cout
,介绍它们的使用方法、缓冲区以及常用的成员函数等相关知识。
1. cin
和 cout
的基本使用
在 C++ 中,cin
和 cout
是标准输入输出流对象,分别用于从标准输入(通常是键盘)读取数据和向标准输出(通常是屏幕)写入数据。
#include <iostream>int main() {int num;std::cin >> num;std::cout << num << std::endl;return 0;
}
在上面的示例中,我们使用 cout
来打印提示消息,并使用 cin
读取用户输入的数字。
2. 运算符重载与 iostream
在 iostream 中,常见的运算符重载包括插入运算符 <<
和提取运算符 >>
。这两个运算符分别用于输出数据到流和从流中提取数据。
重载插入运算符 <<
插入运算符 <<
用于将数据插入到输出流中,通常用于输出数据到控制台或文件。
#include <iostream>class MyClass {
public:int data;MyClass(int d) : data(d) {}friend std::ostream& operator<<(std::ostream& os, const MyClass& obj) {os << obj.data;return os;}
};int main() {MyClass obj(10);std::cout << obj << std::endl;return 0;
}
在上面的示例中,我们重载了 <<
运算符,使得 MyClass
类型的对象可以直接通过 cout
输出。
重载提取运算符 >>
提取运算符 >>
用于从输入流中提取数据,通常用于从控制台或文件中读取数据。
#include <iostream>class MyClass {
public:int data;MyClass() {}friend std::istream& operator>>(std::istream& is, MyClass& obj) {is >> obj.data;return is;}
};int main() {MyClass obj;std::cin >> obj;std::cout << obj.data << std::endl;return 0;
}
在上面的示例中,我们重载了 >>
运算符,使得可以直接从 cin
输入到 MyClass
类型的对象。并且由于fstream和sstream继承了iostream,因此重载了iostream后fstream和sstream也可以使用,后面的博客会将。
3. cin
和 cout
的缓冲区
在默认情况下,cin
和 cout
都是带有缓冲区的。这意味着输入的数据不会立即被程序处理,而是暂时存储在缓冲区中,直到程序需要时才进行读取或写入操作。
缓冲区刷新
缓冲区的刷新通常由以下情况触发:
- 缓冲区已满:当缓冲区填满数据时,会自动刷新缓冲区,将数据发送给目标设备(如屏幕)。
- 手动刷新:可以使用
std::flush
强制刷新输出缓冲区。
std::cout << "Flushing buffer" << std::flush;
关闭缓冲区
有时候,我们可能需要关闭缓冲区以实时地输出数据,而不需要等到缓冲区满或程序结束时才输出。可以使用 std::ios::sync_with_stdio(false)
来关闭 cin
和 cout
的缓冲区。
#include <iostream>int main() {std::ios::sync_with_stdio(false); // 关闭缓冲区std::cout << "This will be printed immediately" << std::endl;return 0;
}
4. cin
和 cout
的常用成员函数
cin
和 cout
提供了许多有用的成员函数,可以帮助我们更灵活地处理输入输出操作。
cin
成员函数
cin.get()
: 从输入流中获取下一个字符。cin.getline(char*, int)
: 从输入流中获取一行数据。可指定分割符,默认为'\n'。cin.read(char*, int):
从输入流中读取一定数量的字符
cout
成员函数
cout.put(char)
: 向输出流中写入一个字符。cout.write(char*, int)
: 向输出流中写入一定数量的字符。
具体使用和例子可以查看手册。
这篇关于深入理解 C++ 中的 IO 流【iostream篇】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!