关键字 template<类型参数列表>
template<类型参数列表>
函数类型 函数名(形式参数列表);
{
函数体
}
T可以是任意类型 当T类型被确定时 其他位置的T类型也同时确定 可以用于定义和函数返回值
函数模板的编译原理
函数模板是具有类型参数的函数。类型参数是表示数据类型的参数,可指代任意一种实际数据类型。编译器在编译到函数模板调用语句时,根据位置对应关系从实参数据类型推导出类型参数所指代的数据类型,然后按照函数模板自动生存一个该类型参数所指代的数据类型,然后按照函数模板自动生存一个该类型的函数定义代码。不同类型实参的函数模板调用语句将生成不同类型的重载函数
函数模板将数据类型参数化,调用时会呈现出参数多态性
template<类型参数列表>
class 类名 // 类声明部分
{
类成员声明
}
类实现部分:所有类外定义的函数成员,必须按如下的语法形式将它们定义成函数模板
(类外定义每次都要说明T模板)
template<类型参数列表>
函数类型 类名<类型参数名列表>::函数名(形式参数列表)
(函数体)
类型参数是一种表示数据类型的参数,类型参数列表可定义一个或多个类型参数,每个类型参数以"typename 类型参数名”或"class类型参数名"的形式定义。
类模板实例化
派生类:实例化类
实例派生后就变为一个普通的类 使用方法也和普通的类一样
派生类:类模板
异常情况
运行时错误的可能原因:
用户操作不当,例如,运行除法运算程序时输入了人数0
输入文件不存在,没有相应文件,打开失败
非法访问内存单元,例如,数组越界,使用未经初始化的指针变量,都将导致运行时错误
网络连接中断,程序可以通过网络发送/接受数据,在网络连接中断的情况下进行收发数据都将导致运行时错误
try-catch异常处理机制
throw语句
计算机执行该语句,将抛出一个异常,并退出当前函数的执行。throw的功能是报告异常,该异常将被try-catch语句捕获并做相应的异常处理
例:
throw 15;//抛出一个int型异常,该异常的详细信息为15
throw “Error name”;//抛出一个字符串类型异常,该异常的详细信息为“Error name”。
try-catch语句
try{
受保护代码段
}
catch(异常类型1){
异常类型1的处理代码}
catch(异常类型2){
异常类型2得到处理代码}
......
如果预计某个程序段有可能发生异常,程序员可以使用try句子将该段代码保护起来
catch子句负责捕获并处理异常,每个catch子句只负责一种类型的异常,异常类型就是抛出该异常的throw语句中表达式结果的类型
catch(...)形式的子句可以匹配并捕获任意类型的异常,其后面的catch字句都将是无效子句,因此catch(...)形式子句应放在所有catch子句的最后
throw关键字的另外用法: