C ++面向对象程序设计 第五章 模板.ppt
《C ++面向对象程序设计 第五章 模板.ppt》由会员分享,可在线阅读,更多相关《C ++面向对象程序设计 第五章 模板.ppt(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社主讲教师:陈良银个人主页:http:/ *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社教材:教材:C+面向对象程序设计面向对象程序设计李涛李涛 主编主编游洪跃游洪跃 陈良银陈良银 李琳等编李琳等编高等教育出版社高等教育出版社20062006年年2 2月出版月出版2022/12/222主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社本书本书内容内容 2022/12/223
2、主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社提纲类模板及模板类类模板及模板类第五章第五章 模板模板ARM Vector TableFIQIRQ(Reserved)Data AbortPrefetch AbortSoftware InterruptUndefined InstructionReset0 x1C0 x180 x140 x100 x0C0 x080 x040 x001 13 32 2函数模板及模板函数函数模板及模板函数模板的基本概念模板的基本概念模板设计及应该实例模板设计及应该实例3
3、 32022/12/224主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社5.1 模板的基本概念模板的基本概念模板是模板是C+支持多态性的一种工具。支持多态性的一种工具。模板将用模板将用“类型参数类型参数”来完成不同的功能。来完成不同的功能。使用模板可以让用户使用模板可以让用户得到类或函数声明的一种得到类或函数声明的一种通用模式。通用模式。使得类中的某些数据成员或者成员函数的参数、使得类中的某些数据成员或者成员函数的参数、返回值取得不同的类型。返回值取得不同的类型。让类型成为参数让类型成为参数20
4、22/12/225主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社5.1.1 模板的概念模板的概念所谓模板,其实就是一种所谓模板,其实就是一种使用使用“数据类型数据类型”作作为参数为参数来产生一系列函数或类的来产生一系列函数或类的机制机制。模板方便了更大规模的软件开发。模板方便了更大规模的软件开发。减少了程序员编写代码的工作量。减少了程序员编写代码的工作量。程序通用性增强程序通用性增强2022/12/226主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精
5、品课程 C+:面向对象程序设计 主编:李涛 高教出版社5.1.2 为何需要使用模板为何需要使用模板/求两个求两个整型数整型数的极大值的极大值int GetMax(int a,int b)return(a b)?a:b;/求两个求两个长整型数长整型数的极大值的极大值long GetMax(long a,long b)return(a b)?a:b;2022/12/227主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社/求两个求两个双精度型数双精度型数的极大值的极大值double GetMax(dou
6、ble a,double b)return(a b)?a:b;/求两个求两个字符型数字符型数的极大值的极大值char GettMax(char a,char b)return(a b)?a:b;2022/12/228主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社是否可以将上述四个函数合成为一个函数啦?是否可以将上述四个函数合成为一个函数啦?/Type用前述的用前述的int、long、double、char替换替换可得到上述四个函数。可得到上述四个函数。Type GetMax(Type a,Typ
7、e b)return(a b)?a,b;难道可以生产函数难道可以生产函数?2022/12/229主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社这实际上这实际上就是一种抽象就是一种抽象。可以将可以将数据类型数据类型说明为参数,以适用于说明为参数,以适用于其他数其他数据类型据类型,这就是模板。,这就是模板。通过模板可以产生类或函数通过模板可以产生类或函数的集合,它们有能的集合,它们有能力操作不同的数据类型。力操作不同的数据类型。因而也就不必要为每一种数据类型因而也就不必要为每一种数据类型设计设计一个
8、单一个单独的类或函数。独的类或函数。说明了结构相似的类说明了结构相似的类和函数。和函数。2022/12/2210主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社模板分为模板分为类模板类模板(class template)和)和函数模板函数模板(function template)两种。)两种。在说明了一个函数模板后,当编译系统发现有在说明了一个函数模板后,当编译系统发现有一个对应的函数调用时,将一个对应的函数调用时,将根据实参中的数据根据实参中的数据类型类型来确认是否匹配函数模板中对应的形参,来确
9、认是否匹配函数模板中对应的形参,然后生成一个然后生成一个重载函数重载函数。模板函数模板函数2022/12/2211主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社该重载函数的定义体与函数模板的函数定义体该重载函数的定义体与函数模板的函数定义体相同,但数据类型参数具体化了,称为相同,但数据类型参数具体化了,称为模板函模板函数数(template function)。)。同样,在说明了一个类模板之后,可以创建类同样,在说明了一个类模板之后,可以创建类模板的实例,称为模板的实例,称为模板类模板类。实际上
10、,实际上,将数据类型作为参数就得到了模板将数据类型作为参数就得到了模板。将参数实例化就得到了模板类或者模板函数。将参数实例化就得到了模板类或者模板函数。模板类模板类2022/12/2212主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社5.2 函数模板及模板函数函数模板及模板函数函数模板是对一批函数模板是对一批模样相同的函数的说明描述模样相同的函数的说明描述,它不是某一个具体的函数。它不是某一个具体的函数。而模板函数则是将函数模板内的而模板函数则是将函数模板内的“数据类型参数据类型参数数”具体化后
11、得到的具体化后得到的重载函数重载函数(就是由模板而(就是由模板而来的函数)。来的函数)。从哲学的抽象和具体的角度来说:从哲学的抽象和具体的角度来说:函数模板是函数模板是抽象的,而模板函数则是具体的。抽象的,而模板函数则是具体的。“人人”和和“本本.拉登拉登”的的区别区别2022/12/2213主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社C语言中,使用不同语言中,使用不同函数名函数名来表达相似功能;来表达相似功能;而而C+中则用中则用函数重载函数重载来表达。来表达。而使用而使用函数模板函数模板,
12、则只需要一段公共的模板描,则只需要一段公共的模板描述代码即可。述代码即可。函数模板减少了程序员输入代码的工作量,是函数模板减少了程序员输入代码的工作量,是C+中中功能最强的特性之一功能最强的特性之一,是,是提高软件代码提高软件代码重用率重用率的重要手段之一。的重要手段之一。与宏定义的区别?与宏定义的区别?2022/12/2214主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社5.2.1 函数模板的定义及生成模板函数函数模板的定义及生成模板函数函数模板大大增强了函数设计的函数模板大大增强了函数设计的
13、通用性通用性。使用函数模板的方法是;使用函数模板的方法是;1、先说明、先说明函数模板,函数模板,2、然后实例化成相应的模板函数、然后实例化成相应的模板函数,3、最后才可以、最后才可以调用调用模板函数,并执行。模板函数,并执行。2022/12/2215主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社函数模板的函数模板的说明形式说明形式一般如下:一般如下:template (模板模板函数形参表函数形参表)/函数定义体函数定义体注意类型形参和注意类型形参和函数形参的位置函数形参的位置2022/12/22
14、16主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社其中,其中,的类型可以是的类型可以是任何类任何类型型:包含基本数据类型,和类类型。:包含基本数据类型,和类类型。每一个类型参数前都需每一个类型参数前都需要加前缀要加前缀class。2022/12/2217主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社函数模板是一组函数的描述,函数模板是一组函数的描述,不能直接执行不能直接执行,它需要实例化为模板函数
15、后才能执行。它需要实例化为模板函数后才能执行。函数模板并函数模板并不是不是一个实实在在的函数。一个实实在在的函数。编译系统编译系统不会为它产生任何执行代码不会为它产生任何执行代码。该定义该定义只是对某类函数的描述只是对某类函数的描述。一旦一旦数据类型形参实例化数据类型形参实例化以后,就产生一个实以后,就产生一个实实在在的模板函数。实在在的模板函数。实例化?实例化?2022/12/2218主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社例例5-1:编写一个对具有:编写一个对具有n个元素的数组个元素的
16、数组a 求求最大值的程序,要求将求最大值的函数设计成最大值的程序,要求将求最大值的函数设计成函数模板以适应不同的数组元素类型。函数模板以适应不同的数组元素类型。smain5_1.cpp 使用函数模板使用函数模板1,数组,数组a的最大值,的最大值,maxValue 10使用函数模板使用函数模板1,数组,数组b的最大值,的最大值,maxValue 9.9使用函数模板使用函数模板1,数组,数组c的最大值,的最大值,maxValue c2022/12/2219主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版
17、社注意事项:注意事项:函数模板的说明和定义必须在全局作用域。函数模板的说明和定义必须在全局作用域。函数模板不能说明为类的成员函数。函数模板不能说明为类的成员函数。另外,函数模板有一个特点,虽然模板参数另外,函数模板有一个特点,虽然模板参数T可以实例化成各种类型,但是采用同一模板参可以实例化成各种类型,但是采用同一模板参数数T的各参数之间的各参数之间必须保持完全一致的类型必须保持完全一致的类型。另外,模板类型参数另外,模板类型参数不具有隐式类型转换的作不具有隐式类型转换的作用用。隐式类型转换?隐式类型转换?2022/12/2220主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语
18、言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社5.2.2 重载函数模板重载函数模板模板函数也模板函数也可以重载可以重载。匹配过程有以下规定:。匹配过程有以下规定:1、首先匹配类型完全相同的重载函数。、首先匹配类型完全相同的重载函数。2、其次,才寻求函数模板来匹配。、其次,才寻求函数模板来匹配。例例5-2:具有函数模板和同名重载函数的匹配过具有函数模板和同名重载函数的匹配过程程smain5_2.cpp 先重载函数,然后函数模板先重载函数,然后函数模板2022/12/2221主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- +面向对象程序设计 第五章 模板 面向 对象 程序设计 第五
限制150内