一个函数模板可以经参数实例化后生成许多仅类型参数不同的模板函数;一个类模板可以经参数实例化后生成许多仅类型参数不同的模板类,而每个模板类都可以定义各自的许多对象,如下图所示。
C++语言模板的声明格式为:
template<模板参数表>
模板定义体
template为声明模板的关键字;
模板参数表可包括一个或一个以上的模板参数,每个模板参数由关键字class和模板形参两部分组成,当模板形参多于一个时,各模板形参用逗号分开;
模板定义体是该模板的作用体,可以是函数或类。
函数模板的语句格式为:
template <class 类型参数表>
返回类型 函数名(函数模板形参表)
{
函数体
}
如:
template<class T> //模板形参为T
Tabs(T x) //函数模板
{
if (x >=0) return x;
else return -x;
}
其中,关键字class也可以用关键字typename代替。例如:
template < class T >
或
template < typename T >
类模板
类模板的语句格式为:
template<模板形参表>
class类名
{
类模板体定义;
};
模板类按下列形式声明对象:
模板类 <模板参数表> 对象名1,…对象名n;
异常处理
异常处理的基本思想:C++语言异常处理用于错误检测函数无法处理错误的情况。这种函数抛出异常,如果有异常处理器捕获这个异常,则处理这个异常。如果没有异常处理器捕获这个异常,则程序终止。
异常处理的实现:
throw表达式语法:
throw 表达式
try块语法:
try
复合语句
catch(异常声明类型)
复合语句
catch(异常声明类型)
复合语句
……
try块语法:
try
复合语句
catch(异常声明类型)
复合语句
catch(异常声明类型)
复合语句
……
运行于异常生命期的五个阶段,参照例11.13:
(1)程序或运行库遇到一个错误状况(阶段1)并且抛出一个异常(阶段2)。
(2)程序的运行停止于异常点,开始搜索异常处理函数。搜索沿调用栈向上搜索。
(3)搜索结束于找到了一个异常申明与异常对象的静态类型相匹配(阶段3)。于是进入相应的异常处理函数。
(4)异常处理函数结束后,跳到此异常处理函数所在的try 块下面最近的一条语句开始执行(阶段5)。