1、输入输出流
在C++中,用面向对象的方法实现流。为了实现流,从上到下定义了几种流类:
a. ios 是抽象流基类
b. ios 的派生类 istream 是输入流基类
c. ios 的派生类 ostream 是输出流基类
d. iostream 是输入/输出流类,由 istream 和 ostream 两个基类共同派生出来
在 I/O 流类中定义了若干成员函数,其中两个比较特殊的成员:
a.提取运算符:>>
b.插入运算符:<<
在流类库中,在重要的两部分功能为标准输入/输出和文件处理,C++的流类库中定义了四个全局流对象,完成人机交互:
a. cin:标准输入流对象,键盘为其对应的标准设备;
b. cout:标准输出流对象,显示器为其对应的标准设备;
c. cerr 和 clog:标准错误输出流,输出设备是显示器;
其中,cin、cout 和clog带缓冲区,缓冲区由streambuf类对象管理。而 cerr为非缓冲区流,一旦错误发生立即显示。
2、模板
模板具有两种形式:
a.函数模板
b.类模板
函数模板:
函数模板提供了具有处理相同功能的一类函数的抽象,它以任意类型T为参数,定义形式如下:
template <参数化类型名表>
<返回类型> <函数名>(<参数表>)
{
// 函数体
}
template <typename T_TYPE>
int fun(T_TYPE NumA,T_TYPE NumB)
{
// 函数体
}
template 是定义函数模板的关键字,<参数化类型名表>可以包含基本类型,也可以包含类类型,不过需要加上关键字 class 。例:template <class T_TYPE>
函数模板:模板的定义,是一类函数的描述,不是实际的函数,定义中使用通用的类型参数;
模板函数:函数模板实例化的函数,是一个实际的函数,它由编译器遇到 模板函数调用时生成,具有可执行程序代码。
模板特化:也可理解为实例化,分为显示实例化和隐式实例化,一般将显示实例化称为特化。
特化分为两种:
普通特化:将此模板的所有替换类型的某一种类型进行特别处理;
偏特化:将此模板的所有替换类型的某一种类型的某几项进行特别处理;
类模板:
定义格式:
template <模板参数表>
class <类名>
{
// 类体说明
}
template 是关键字,<模板参数表>中可以有多个参数,用逗号分隔;
类模板:具有相同特性的一组类,定义的一种模式,说明单个类怎样建立。
模板类:模板实参生成的类,也可理解为类模板实例化生成的类,可以生成对象。