aihot  2020-11-12 09:24:27  OpenCV |   查看评论   

 C++的那些事:流与IO类

1、流的概念

"流"就是"流动",是物质从一处向另一处流动的过程,比如我们能感知到的水流。C++的流是指信息从外部输入设备(如键盘和磁盘)向计算机内部(即内存)输入和从内存向外部输出设备(如显示器和磁盘)输出的过程,这种输入输出过程被形象地比喻为"流"。

为了实现信息的内外流动,C++系统定义了I/O类库,其中的每一个类都称作相应的流或流类,用以完成某一方面的功能。根据一个流类定义的对象也时常被称为流。

通常标准输入或标准输出设备显示器称为标准流;外存磁盘上文件的输入输出称为文件流;对于内存中指定的字符串存储空间称为字符串流。

那么流的内容通常是什么呢?

流里的基本单位是字节,所以又称为字节流。字节流可以是ASCII字符、二进制数据、图形图像、音频视频等信息。文件和字符串也可以看成是有序的字节流,又称为文件流和字符串流。

2、IO类

C++的IO类库属于STL的一部分,在STL中定义了一个庞大的类库,它们的继承关系为下图:

管理标准的输入/输出流的类为:istream(输入)、ostream(输出)、iostream(输入输出),其中istream和ostream直接从ios中继承,iostream多重继承了istream和otream。而cin是STL中定位的一个用于输入的istream对象,cout、cerr、clog是三个用于输出的ostream对象。其中cout对象也被称为标准输出,用于正常的输出,cerr用来输出警告和错误信息,因为被称为标准错误,而clog用来输出程序运行时的一般性信息。cerr和clog之间的不同之处在于cerr是不经过缓冲区直接向显示器输出有关信息,而clog则是先把信息放在缓冲区,缓冲区满后或遇上endl时向显示器输出。

管理文件流的类为:ifstream(文件输入)、ofstream(文件输出)和fstream(文件的输入/输出)。其中ifstream是从istream中继承的类,ofstream是从ostream中继承的类,fstream是从iostream继承的类。

管理字符串流的类为:istringstream(字符串输入)、ostringstream(字符串输出)和stringstream(字符串的输入/输出)。其中istringstream是从istream中继承的类,ostringstream是从ostream中继承的类,stringstream是从iostream继承的类。

3,>>和<<操作符

3.1 >>的用法

在istream输入流类中定义有对输入运算符>>重载的一组公用成员函数,函数的具体声明格式为:

istream& operator>> (bool& val); istream& operator>> (short& val); istream& operator>> (unsigned short& val); istream& operator>> (int& val); istream& operator>> (unsigned int& val); istream& operator>> (long& val); istream& operator>> (unsigned long& val); istream& operator>> (long long& val); istream& operator>> (unsigned long long& val); istream& operator>> (float& val); istream& operator>> (double& val); istream& operator>> (long double& val); istream& operator>> (void*& val)

由于右移操作符重载用于给变量输入数据的操作,所以又称为提取操作符,即从流中提取出数据赋给变量。

当系统执行cin>>variable操作时,将根据实参x的类型调用相应的提取操作符重载函数,把variable引用传送给对应的形参,接着从键盘的输入中读入一个值并赋给variable后,返回cin流,以便继续使用提取操作符为下一个变量输入数据。

当从键盘上输入数据时,只有当输入完数据并按下回车键后,系统才把该行数据存入到键盘缓冲区,供cin流顺序读取给变量。还有,从键盘上输入的每个数据之间必须用空格或回车符分开,因为cin为一个变量读入数据时是以空格或回车符作为其结束标志的。

当cin>>str_ptr操作中的str_ptr为字符指针类型时,则要求从键盘的输入中读取一个字符串,并把它赋值给str_ptr所指向的存储空间中,若str_ptr没有事先指向一个允许写入信息的存储空间,则无法完成输入操作。另外从键盘上输入的字符串,其两边不能带有双引号定界符,若带有只作为双引号字符看待。对于输入的字符也是如此,不能带有单引号定界符。

3.2 <<的用法

在ostream输出流类中定义有对左移操作符<<重载的一组公用成员函数,函数的具体声明格式为:

ostream& operator<< (bool val); ostream& operator<< (short val); ostream& operator<< (unsigned short val); ostream& operator<< (int val); ostream& operator<< (unsigned int val); ostream& operator<< (long val); ostream& operator<< (unsigned long val); ostream& operator<< (long long val); ostream& operator<< (unsigned long long val); ostream& operator<< (float            
 1/7    1 2 3 4 5 6 下一页 尾页
  
 

除特别注明外,本站所有文章均为 人工智能学习网 原创,转载请注明出处来自C++的那些事:流与IO类

留言与评论(共有 0 条评论)
   
验证码: