
第13章模板与异常处理·13.1模板13.2异常处理机制13.3友元程序设计举例
第13章 模板与异常处理 0 13.1 模板 13.2 异常处理机制 13.3 友元 程序设计举例

模板13.1 7应用背景1、两个或多人函数的程序结构相同;2、P两个或多个类的结构相同;差别:参数/数据成员类型不同,3、天函数/成员函数返回类型不同解决方法:C++提供了模板机制作用:简化程序代码,实现软件复用
13.1 模板 1 应用背景: 1、两个或多个函数的程序结构相同; 2、两个或多个类的结构相同; 3、差别:参数/数据成员类型不同, 函数/成员函数返回类型不同。 解决方法:C++提供了模板机制 作用:简化程序代码,实现软件复用

模板13.1 7C++模板类型1、函数模板抽象通用的函数,可生成一批具体的函数由函数模板经实例化生成的具体函数称为模板函数。2、类模板抽象通用的类,可生成一批具体的类由类模板经实例化生成的具体类称为模板类
13.1 模板 2 C++模板类型: 1、函数模板 抽象通用的函数,可生成一批具体的函数。 由函数模板经实例化生成的具体函数称为模板函数。 2、类模板 抽象通用的类,可生成一批具体的类。 由类模板经实例化生成的具体类称为模板类

模板13.1函数模板:一,用来定义通用的函数,其作用类似函数重载优点:编码比函数重载简单1、定义格式:template ()..注:函数模板为通用函数,其函数类型和形参类型不具体指定,用虚拟的类型来代表
13.1 模板 3 一、函数模板: 用来定义通用的函数,其作用类似函数重载 优点:编码比函数重载简单 1、定义格式: template > () { . } 注:函数模板为通用函数,其函数类型和形参类型 不具体指定,用虚拟的类型来代表

2、说明(1)“模板参数表"中的模板参数的形式为class或typename注:此处关键字class与一般所讲的类无关,而是与“类型参数一起说明这是一个内部类型或用户自己已定义的数据类型(2)在使用模板函数时,模板中的类型参数可用一个实际类型替换,从而达到了类型通用的自的,(3)当类型参数的含义确定后,编译器将以函数模板为样板,生成一个具体的函数
4 2、说明 (1) “模板参数表”中的模板参数的形式为: class 或 typename 注:此处关键字class与一般所讲的类无关,而是与“类型参 数”一起说明这是一个内部类型或用户自己定义的数据类型。 (2)在使用模板函数时,模板中的类型参数可用一 个实际类型替换,从而达到了类型通用的目的。 (3)当类型参数的含义确定后,编译器将以函数 模板为样板,生成一个具体的函数

例13-1求两个数最大值的函数模板#include#includeusing namespace std:template//模板声明,T为类型参数,或Max(T a,T b) //()return a>b?a:b;
例13-1 求两个数最大值的函数模板 5 #include #include using namespace std; template //模板声明,T为类型参数,或 Max(T a, T b) //() { return a>b?a:b; }

/测试用主函数Typeint:5int mainOdouble:5.2TypeTypestring:xjtuint i1 = 3, i2 = 5:double d1 = 3.3, d2 = 5.2:string str1("xjtu"), str2("xian"):cout << "Type int: " << Max(il, i2) << endl:cout << "Type double: " << Max(dl, d2) << endl;cout <<"Type string: " <<Max(strl, str2)<< endl:return O;人D
6 //测试用主函数 int main() { int i1 = 3, i2 = 5; double d1 = 3.3, d2 = 5.2; string str1("xjtu"), str2("xian"); cout << "Type int: " << Max(i1, i2) << endl; cout << "Type double: " << Max(d1, d2) << endl; cout << "Type string: " << Max(str1, str2) << endl; return 0; }

3、使用函数模板的注意事项(1)在函数模板的参数表中,至少有一个参数的类型为模板的类型参数(2)函数的返回值的类型也可以是该类型参数。(3)模板中可以带有多个参数类型例如:template void func1(T1 arg1 , T2 arg2, T3 arg3)..7
3、使用函数模板的注意事项 7 (1)在函数模板的参数表中,至少有一个参 数的类型为模板的类型参数。 (2)函数的返回值的类型也可以是该类型参 数。 (3)模板中可以带有多个参数类型。 例如: template void func1(T1 arg1,T2 arg2, T3 arg3) { . }

(4)函数可以带有模板参数表中未给出的已存在的数据类型的参数例如 :template T func2(T argl , int arg2)Y人
8 (4)函数可以带有模板参数表中未给出的、 已存在的数据类型的参数。 例如: template T func2(T arg1,int arg2) { . }

例13-4:方幂为正整数的幂函数模板template T Power(T a, int m)Ty=a,while(--m>0)//m=m-1;m>0( y*=a;return y
例13-4:方幂为正整数的幂函数模板 9 template T Power(T a, int m) { T y = a; while(-m>0) //m=m-1;m>0 { y*=a; } return y; }