C++面向对象程序设计-电子教案-栗青生 第7章

上传人:E**** 文档编号:89384511 上传时间:2019-05-24 格式:PPT 页数:36 大小:624.50KB
返回 下载 相关 举报
C++面向对象程序设计-电子教案-栗青生 第7章_第1页
第1页 / 共36页
C++面向对象程序设计-电子教案-栗青生 第7章_第2页
第2页 / 共36页
C++面向对象程序设计-电子教案-栗青生 第7章_第3页
第3页 / 共36页
C++面向对象程序设计-电子教案-栗青生 第7章_第4页
第4页 / 共36页
C++面向对象程序设计-电子教案-栗青生 第7章_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《C++面向对象程序设计-电子教案-栗青生 第7章》由会员分享,可在线阅读,更多相关《C++面向对象程序设计-电子教案-栗青生 第7章(36页珍藏版)》请在金锄头文库上搜索。

1、C+面向对象程序设计 第七章,本章导读,模板是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而现了真正的代码重用。模板分为函数模板和类模板,它们分别允许用户构造模板函数和模板类。,本章要点,函数模板 类模板,第七章 目录,7.1 模板的概念 7.2 函数模板与模板函数 7.3 模板函数的覆盖 7.4 类模板与模板类 7.5 程序举例 7.6 本章小结 习题七,7.1 模板的概念,模板分为函数模板和类模板,它们分别允许用户构造模板函数和模板类。模板、模板函数、模板类和对象之间的关系如图7-1所示:,图7-1,7.2 函数模板与模板函数,7.2.1 函数模板的说明 7.2

2、.2 函数模板的使用,7.2.1 函数模板的说明,函数模板的一般说明形式如下: template 返回类型 函数名(模板形参表) 函数体 其中,template是一个声明模板的关键字,它表示声明一个模板。,例如,将求最大值函数swap ()定义成函数模板,如下所示: template void swap(T 也可以定义成如下形式,template void swap(T 其中,T为类型参数,它既可取系统预定义的数据类型,又可以取用户自定义的类型。,7.2.2 函数模板的使用,上面定义的函数代表的是一类函数,若要使用这个函数进行求最大值操作,必须先将T实例化的参数称为模板实参,用模板实参实例化的

3、函数称为模板函数。用模板实参实例化的函数称为模板函数。,当编译系统发现有一个函数调用 函数名(模板实参表); 时,将根据模板实参表中的类型生成一个函数即模板函数。该模板函数的函数体与函数 模板的函数定义体相同。,【例7.2】定义用于变量交换的函数模板。 #include using namespace std; template void swp(T ,int main() char a=A, b=B; int c=123, d=456; double e=12.3, f=45.6; swp(a,b); swp(c,d); swp(e,f); cout “交换后:“ a “,“ b endl;

4、 cout “交换后:“ c “,“ d endl; cout “交换后:“ e “,“ f endl; system(“pause“); return 0; ,程序运行结果: B,A 456, 123 45.6, 12.3 函数模板就像是一个带有类型参数的函数,编译程序会根据实际参数的类型确定参 数的类型。,7.3 模板函数的覆盖,下列函数模板: template T max(T a, T b) retum ab?a:b; 对于简单的数据类型,如整型、实型、字符型数据,这个模板能够正常工作。,对于字符串,用上述模板就会出现问题,因为对于字符串,不能使用运算符“”,要为其编写独立的max()函

5、数。 我们将函数模板生成的函数称为模板函数。如果某一函数的函数原型与函数模板生成的函数(模板函数)原型一致,称该函数为模板函数的覆盖函数。,【例7.3】 模板函数的覆盖 #include #include using namespace std; template T max1(T a, T b) return ab?a:b; ,char *max1(char *x, char *y) return strcmp(x, y) 0 ? x :y; void main() char *p=“ABCD“, *q=“EFGH“; p=max1(p, q); int a =max1(10, 20); f

6、loat b =max1(12.3, 45.6); cout p endl; cout a endl; cout b endl; system(“pause“); ,在进行函数调用时,编译程序采用如下策略确定调用哪个函数: ()首先寻找一个实参与形参完全匹配的覆盖函数,如果找到,则调用该函数。 ()如果能通过函数模板生成实例函数,并且参数匹配,则调用该函数。 ()通过强制类型转换,寻找能够与实参匹白的覆盖函数,或通过函数模板生成的实 例函数、如果找到则调用该函数。 ()如果所有努力失败,则给出出错信息。,7.4 类模板与模板类,类模板允许用户为类定义一种模式,使得类中的某些数据成员,某些成员函

7、数的参数或返回值,能取任意数据类型。 定义一个类模板与定义函数模板的格式类似,必须以关键字template开始,然后是类名,其格式如下:,template class 类名 / ; 类模板不是代表一个具体的、实际的类,而是代表着一类类。实际上,类模板的使用就是将类模板实例化成一个具体的类,它的格式为: 类名 对象名;,【例7.4】使用栈类模板的使用。 #include using namespace std; const int size=10; template /声明一个类模板,class stack public: void init() tos=0; void push(Type ch

8、); /参数取Type类型 Type pop(); /返回类型取Type类型 private: Type stcksize; /数组的类型为类型参数Type,即可取任意类型 int tos; ; template void stack:push(Type ob) if (tos=size) cout Type stack :pop() if (tos=0) cout“stack is empty”; return 0; tos-; return stcktos; ,int main() /定义字符堆栈 stack s1,s2; /创建两个模板参数为char型的对象 int i; s1.init

9、(); s2.init(); s1.push(a); s2.push(x); s1.push(b); s2.push(y); s1.push(c); s2.push(z); for(i=0;i is1,is2; /创建两个模板参数为int型的对象 is1.init(); is2.init(); is1.push(1); is2.push(2); is1.push(3); is2.push(4); is1.push(5); is2.push(6); for (i=0;i3;i+) cout“pop is1: “is1.pop()endl; for (i=0;i3;i+) cout“pop is2

10、: “is2.pop()endl; system(“pause”); return 0; ,程序运行结果: pop s1: c pop s1: b pop s1: a pop s2: z pop s2: y pop s2: x pop is1: 5 pop is1: 3 pop is1: 1 pop is2: 6 pop is2: 4 pop is2: 2,7.5 程序举例,【实例2】使用缺省参数定义数组的类模板 #include using namespace std; template class Array T *data; int size; public: Array(int); A

11、rray(); T ,template Array :Array(int n) data = new Tsize=n; template Array :Array() delete data; template T ,void main() int i; Array L1(10); /等价于Array L1(10) Array L2(26); for(i=0; i10; i+) L1i = i; for(i=0; i26; i+) L2i = A+i; for(i=0; i10; i+) cout L1i ; cout endl; for(i=0; i26; i+) cout L2i ; co

12、ut endl; system(“pause”); 程序运行结果: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z,7.6 本章小结,()模板是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而现了真正的代码重用。 ()模板分为函数模板和类模板,它们分别允许用户构造模板函数和模板类。 ()我们将函数模板生成的函数称为模板函数。如果某一函数的函数原型与函数模板生成的函数(模板函数)原型一致,称该函数为模板函数的覆盖函数。,习题七,一、填空题 1定义一个函数模板要用到的第一个修饰

13、符是_。 2在函数模板的参数中,用class修饰的参数称为_参数。 3函数模板生成的函数称为 。如果某一函数的函数原型与函数模板生成的函数(模板函数)原型一致,称该函数为模板函数的 。 4模板分为 和 。 5. 模板是实现 的一种工具,它可以实现 。,二、选择题 C+程序的基本模块为( )。 A表达式 B标识符 C语句 D函数,以下关于函数模板叙述正确的是( )。 A函数模板也是一个具体类型的函数 B函数模板的类型参数与函数的参数是同一个概念 C通过使用不同的类型参数,函数模板可以生成不同类型的函数 D用函数模板定义的函数没有类型,类模板template class X,其中,友元函数f对特定类型T(如int),使函数f(X,4模板的使用的作用是( ) 实现多态性 加强了类的封装性 提高了代码的可重用性和可维护性 提高代码的运行效率,三、程序设计题 1指出下面函数的功能。 template bool fun8(T a, int n, T key) for(int i=0;in;i+) if(ai=key) return true; return false ; ,用函数模板方式设计一个函数模板sort,采用直接插入排序方式对数据进行排序,并对整数序列和字符序列进行排序。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号