程序举例
类模板
本章内容
函数模板
1
异常处理
2
3
4
第9章 模板和异常处理
第1页/共63页
第9章 模板和异常处理
模板常用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为,是实现代码重用的一种工具,可以实现函数或类要处理的数据类型参数化,表现为参数的多态性,即将类型定义为参数,从而实现真正的代码可重用性。
模板有两种,一种是函数模板,另一种是类模板。
不管是哪种模板都不是实实在在的类或函数,而仅仅是对类或函数的描述。
第2页/共63页
第9章 模板和异常处理
异常处理一般用在大型软件中,由于函数之间有着明确的分工和复杂的调用关系,发现错误的函数往往不具备处理错误的能力。此时异常处理机制可将异常的检测与处理分离。
当在一个函数体中检测到异常条件存在,但却无法确定相应的处理方法时,该函数将引发一个异常,由函数的直接或间接调用者捕获这个异常并处理这个错误。
第3页/共63页
函数模板
函数模板的定义
函数模板是一个通用函数,其函数类型和形参类型不具体指定,而是用一个虚拟的类型来代表。
函数模板并不是真正的函数,只是一种产生多种函数的模式或者框架。
第9章 模板和异常处理
第4页/共63页
函数模板的定义
函数模板定义的一般格式如下:
template <typename T>
函数类型 函数名(形参列表) {
函数体
}
这里,template是关键字,表示声明一个模板;尖括号中不能为空,其中typename(或使用class)是类型参数说明关键字;T是类型参数。
第9章 模板和异常处理
第5页/共63页
函数模板
函数模板的定义
第9章 模板和异常处理
如:template <class T>
T GetMax (T a, T b){ return (a>b?a:b); }
函数模板定义中类型参数可以是一个,也可以是多个,如果多于一个,则每个形参前都要加关键字typename(或class),且各类型参数间用逗号隔开。如:
template <typename T, typename U >
T GetMin (T a, U b) { return (a<b? a: b); }
此时函数 GetMin可以接受两个不同类型的参数,通过T和U来区分,结果将返回一个与第一个参数同类型的数据。
第6页/共63页
函数模板
函数模板的定义
函数模板可以生成通用的函数,这些函数能够接受任意数据类型的参数,可返回任意类型的值,而不需要对所有可能的数据类型进行函数重载时的匹配检查。
第9章 模板和异常处理
第7页/共63页
第9章 模板和异常处理
函数模板
函数模板的使用
函数模板定义后,可以直接用实参代替函数模板定义中的形参,来实现对该函数的调用。具体形式为:
函数名(实参表);
编译器将根据用户给出的实参类型,生成相应的重载函数。生成的重载函数称为模板函数,是一个实实在在的函数。
第8页/共63页
第9章 模板和异常处理
函数模板
函数模板的使用
如: template <class T>
T GetMax (T a, T b){ return (a>b?a:b); }
int main ( ){
cout << " GetMax ( 7 , 2 )=" << GetMax ( 7 , 2 ) << endl ;
//输出7
cout << " GetMax ( 'p' , 'Q' )=" << GetMax ( 'P' , 'Q' )
<< endl ; //输出字符Q
cout << " GetMax (
c 课件PPT课件 来自淘豆网m.daumloan.com转载请标明出处.