欢迎来到天天文库
浏览记录
ID:46972470
大小:259.00 KB
页数:32页
时间:2019-12-02
《《模板-类的再抽象》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《解析C++面向对象程序设计》第7章模板——类的再抽象内容提要STL标准模板库的形成原因函数模板和模板函数类模板与模板类STL标准模板库的简单应用7/21/20212第7章模板--类的再抽象7.1标准模板库的设计问题【例7-1】能否设计一个“通用函数”,该函数能对各种数据类型的数组(基本类型数组或对象数组)进行倒序?我们首先想到用已学知识----重载来解决该问题提出问题7/21/20213第7章模板--类的再抽象【例7-2】函数重载实现倒序。//example7_2.cpp//对整型数组地址begin到end-1的元素倒序voidReverse(int*begin,int*end){//
2、首尾元素交换//然后begin指针增1,end指针减1for(;begin!=end&&begin!=--end;begin++){inttemp;temp=*begin;*begin=*end;*end=temp;}}7/21/20214第7章模板--类的再抽象【例7-2】续//对实型数组地址begin到end-1的元素倒序voidReverse(float*begin,float*end){for(;begin!=end&&begin!=--end;begin++){floattemp;temp=*begin;*begin=*end;*end=temp;}}7/21/20215第7章
3、模板--类的再抽象函数重载不仅方便用户对函数名的记忆,而且更主要的是完善了同一个函数的代码功能,给调用带来了许多方便。它允许多个同名的函数存在,但同名的各个函数的形参必须有区别:要从形参的类型、个数或顺序几个方面来区分。7/21/20216第7章模板--类的再抽象显然,如果需要处理所有数据类型的参数,则需要更多的代码进行函数重载。其冗余增加。7/21/20217第7章模板--类的再抽象分析问题从例7-2的代码可以看出,两个重载函数从算法上来看是一样的,整个程序的区别仅仅在于函数所处理数据类型的不同。如果可以将数据类型参数化,那么我们只需要编写一个函数,就可以解决各种数据类型数组的倒序问题
4、,即函数模板。下面介绍模板:7/21/20218第7章模板--类的再抽象7.2模板的概念模板(Template)使用参数化的C++类型创建相应的函数和类,分为两种类型:函数模板(FunctionTemplate)类模板(ClassTemplate)一个模板并非一个实实在在的类或函数,仅仅是一个类或函数的描述,是参数化的函数和类。7/21/20219第7章模板--类的再抽象7.3函数模板先看一个例子templateTmax(Ta,Tb){return(a>b)?a:b;}7/21/202110第7章模板--类的再抽象函数模板的定义函数模板的定义格式template<类型参数
5、表><返回值类型><函数名>(<参数表>){<函数体>}7/21/202111第7章模板--类的再抽象模板函数的生成函数模板是对一组函数的描述,它以任意类型T为参数及函数返回值。它不是一个实实在在的函数,编译系统并不产生任何执行代码。当编译系统在程序中发现有与函数模板中相匹配的函数调用时,便生成一个重载函数,该重载函数的函数体与函数模板的函数体相同。7/21/202112第7章模板--类的再抽象【例7-3】示例函数模板的定义,实现对不同数据类型数组进行排序。//example7_3.cpp7/21/202113第7章模板--类的再抽象//对任意类型数组地址begin到end-1的元素由小
6、到大排序templatevoidSort(T*begin,T*end){T*pi,*pj;for(pi=end;pi>begin;pi--)for(pj=begin+1;pj*pj)//采用冒泡法排序{Ttemp;temp=*(pj-1);*(pj-1)=*pj;*pj=temp;}}7/21/202114第7章模板--类的再抽象7.4类模板类模板的定义:template<类型参数表>class<类模板名>{<类成员的声明>};7/21/202115第7章模板--类的再抽象类模板中的成员函数的定义可以放在类模板的定义体中(此时与类中
7、的成员函数的定义方法一致)也可以放在类模板的外部定义成员函数,此时成员函数的定义格式如下:template<类型参数表><返回值类型><类模板名><类型名表>::<函数名>(<参数表>){<函数体>}7/21/202116第7章模板--类的再抽象注意!在类模板外定义成员函数时,每一个函数前均加上:template<类型参数表>7/21/202117第7章模板--类的再抽象类模板的使用利用类模板定义的只是对类的描述,它本身还不是一个实
此文档下载收益归作者所有