1、基本类模板
iostream(.h)库的基础是类模板的层级结构。类模板以一种与类型无关的方式,提供了这个库的大部分功能。
基本类模板是一个类模板的集合,其中每个类模板有两个参数:字符类型(charT)参数决定处理的元素类型,而特性参数对每个特定的元素类型提供一些额外的特征。这个类层级结构中的类模板和它们的字符类型的实例相比,名字前面多了前缀basic_。例如,istream由之实例化而来的类模板名为basic_istream,fstream由之实例化而来的类模板名为basic_fstream,等等。唯一的例外是ios_base,因为它本身就是类型无关的,所以它并不基于任何类模板,而是一个正规类。
2、类模板实例
iostream(.h)库中集成了两组标准的整个iostream类模板层级结构的实例:一组是面向单字节的,处理char类型的元素;另一组是面向宽字节的,处理wchar_t类型的元素。面向单字节(char型)的实例可能是iostream(.h)库更为人所知的一部分。 ios、istream和ofstream等类都是面向单字节的。右图是面向单字节的所有类的名称和关系。 面向宽字节(wchar_t型)的实例的命名规则与面向单字节的实例相同,但所有类和对象名称前有前缀w,例如wios、wistream和wofstream。
图1、面向单字节的类和名称的关系
3、包含的头文件
iostream库 | |
<fstream> | <iomainip> |
<ios> | <iosfwd> |
<iostream> | <istream> |
<ostream> | <sstream> |
<streambuf> | <strstream> |
4、流对象
iostream库定义了三个标准流对象:
①cin:表示标准输入(standard input)的istream类对象。cin使我们可以从设备读如数据。
②cout:表示标准输出(standard output)的ostream类对象。cout使我们可以向设备输出或者写数据。
③cerr:,表示标准错误(standard error)的osttream类对象。cerr是导出程序错误消息的地方。
5、实现原理:
下面我们以输出为例,说明其实现原理:
cout是ostream类的对象,因为它所指向的是标准设备(显示器屏幕),所以它在iostream头文件中作为全局对象进行定义。
ostream cout(stdout);//其默认指向的C中的标准设备名,作为其构造函数的参数使用。
在iostream.h头文件中,ostream类对应每个基本数据类型都有其友元函数对左移操作符进行了友元函数的重载。
stream& operator<<(ostream &temp,int source);
ostream& operator<<(ostream &temp,char *ps);
一句输出语句:cout<<"www.cndev-lab.com",事实上调用的就是ostream& operator<<(ostream &temp,char *ps);这个运算符重载函数,由于返回的是流对象的引用,引用可以作为左值使用,所以当程序中有类似cout<<"www.cndev-lab.com"<<"中国软件开发实验室";这样的语句出现的时候,就能够构成连续输出。