C++中的流(stream)是一种重要的机制,它可以实现输入和输出。在这个机制中,ostream流是输出流中的一种,常常被用来将数据输出到控制台或到文件中。但是,并不是很简单,因此,本文将着重介绍这个机制的基本原理,以及一些常见的用法。
一、什么是ostream
在C++中,ostream是作为C++标准库中的一种输出流(stream)的类型,专门用于向外界提供输出的机制。该机制可以帮助程序员很方便地将数据输出到控制台或到文件中。
与其它类型的流一样,ostream是一个抽象的类,它不能直接被实例化,但是我们可以通过继承 ostream 来构造一个具体的类,如下所示:
```
class ostream
{
public:
// 输出一个字符
ostream& operator<< (char);
// 输出一个字符串
ostream& operator<< (const char*);
// 输出一个布尔值
ostream& operator<< (bool);
// 输出一个整数
ostream& operator<< (int);
// 输出一个长整数
ostream& operator<< (long);
// 输出一个实数
ostream& operator<< (double);
// 输出一个指针
ostream& operator<< (void*);
// 输出一个操作符号
ostream& operator<< (ostream& (ostream&));
};
```
我们可以看到,ostream 类中包含了一些操作符重载函数。这些操作符重载函数的作用是将各种类型的数据输出到流中。其中,最常用的是 operator<<(“插入”操作符),它的作用是将其右侧的数据插入到 ostream 流中。
二、ostream的使用
在C++中,如果要使用 ostream 流,必须包括头文件
```
#include
using namespace std;
int main ()
{
int i = 100;
double y = 3.14;
cout << "i = " << i << endl;
cout << "y = " << y << endl;
return 0;
}
```
在上述代码中,我们首先包括了头文件
```
i = 100
y = 3.14
```
可以看到,每个输出语句都以插入操作符 << 开始,后面依次跟上需要输出的变量或常量。
另外,在使用插入操作符时,我们可以使用“流对象控制”(manipulators)来控制输出的格式。例如:
```
#include
#include
using namespace std;
int main()
{
double y = 3.14159;
cout << "y = " << y << endl;
cout << setprecision(3) << "y = " << y << endl;
return 0;
}
```
在上述代码中,我们使用了 manipulators 来控制输出的精度。运行程序后,控制台将会输出以下内容:
```
y = 3.14159
y = 3.14
```
可以看到,第二个输出语句中的 setprecision(3) 控制了输出的精度,在这里它告诉 cout 流最多输出3位小数。
三、自定义输出流
C++中的 ostream 流不仅可以输出基本数据类型和常量,还可以输出自定义类型的数据。例如:
```
#include
using namespace std;
// 自定义结构体
struct MyStruct
{
int x;
double y;
};
// 重载流输出操作符
ostream& operator<< (ostream& out, const MyStruct& s)
{
out << "(" << s.x << ", " << s.y << ")";
return out;
}
int main()
{
MyStruct s = { 100, 3.14 };
cout << "s = " << s << endl;
return 0;
}
```
在上述代码中,我们使用了一个自定义的结构体,然后又重载了插入操作符 <<,这个操作符的作用是将 MyStruct 类型的数据输出到流中。在 main 函数中,我们定义了一个 MyStruct 类型的实例 s,然后使用 cout 流将其输出。运行程序之后,控制台将会输出以下内容:
```
s = (100, 3.14)
```
从这里可以看出,我们可以通过重载插入操作符,实现任意类型的输出。
四、小结
在 C++ 中,使用 ostream 流可以很方便地输出各种类型的数据到控制台或文件中。在这个流机制中,输出语句都以插入操作符 << 开始,后面紧跟着需要输出的变量或常量,可以使用 manipulators 控制输出格式,也可以通过重载插入操作符来输出自定义类型数据。因此,深入理解 C++ 中的 ostream 流输出机制对于程序员来说至关重要。