内容正文:
第6章模板
模板的概念类模板
函数模板模板与继承
学习目标
LEARNING OBJECTIVES
理解模板的概念
掌握函数模板的定义及初始化
掌握函数模板的重载、模板与继承
掌握类模板的定义与初始化
初心至善匠心套人
江
目录
CATALOUGUE
01
模板的概念
03
类模板
02
函数模板
04
模板与继承
心至善匠心套人
6.1模板的概念
·在编写程序时,编程者经常会遇到这样的情况:对于很多数据类型,需要提供一
种逻辑功能完全相同的操作,例如编写程序实现交换两个整型数和交换两个实型
数。编写这样的程序时,程序的逻辑功能完全相同,其区别仅仅是处理的数据类
型不同。对于这种问题,根据以前学习的知识可以用两种方法来解决,具体如下
所示:
·使用带参数的宏来实现,具体示例如下:
dufine my含eF,b1tm)-ih:b》-《at。b1:a=b:l
·这种方法虽然简便,但带参数的宏有时会带来一些意想不到的错误,因此不推荐
使用。
初心至善匠心套人
6.1模板的概念
使用重载函数实现,具体示例如下:
void aySveplint sa,int $b)
1n5年=n5
a=bl
b-Et
void sy8vapldouble ta,double sb)
docble t a1
4=0:
bt;
·如果想让mySwap0函数能够交换任意一对同数据类型的变量,重载函数显然太麻
烦了,这时就需要把mySwap0函数中的数据类型参数化,即使用函数模板,具体
示例如下:
Eep】4Cy生nara T
o1G¥y⊙apT5,T4b
Tt"A2
s=b」
b-:
心至善匠心套人
6.1模板的概念
·其中,template是声明模板的关键字,typename是定义类型形式参数的关键字。
与之类似,如将类定义中的类型也参数化就可以得到类模板。C++程序是由类
和函数组成的,因此对应的模板也分为类模板和函数模板。
·综上所述,若一个程序的功能是对任意类型的数据进行相同的操作,则将所操作
的数据类型说明为参数,然后就可以把这个程序改写为模板,因此可以说模板是
对具有相同特性的函数或类再抽象,它将程序所处理对象的类型参数化,这样就
可以为各种逻辑功能相同而数据类型不同的程序提供一种代码共享机制。
喷版
·模板分为函数模板与类模板,将模板中的类
型参数实例化,就可以得到模板函数与模板
远数供拟
类清板
类,模板类再实例化就可以得到对象,如图
实两化
实制化
所示。
供饭正数
横校爽
需形化
对第
心至善匠心自人
6.2
函数模板
6.2.1
函数模板的定义
6.2.2
函数模板的实例化
6.2.3
函数模板的重载
初心至善匠心套人
6.2函数模板
。
函数模板就是实现数据类型参数化的函数定义,在需要调用函数时,用实际的
数据类型对类型参数自动实例化得到对应的模板函数。
初心至善匠心套人
6.2函数模板
6.2.1函数模板的定义
·考虑交换两个数的函数mySwap(a,b),a与b可以是任意数据类型。如果利用函数
重载进行实现,就必须为每一个类型提供一个重载函数的版本,这样会让程序变
得冗余,显然与代码重用的原则相违背。此时使用函数模板,可以让数据类型作
为函数模板的参数,定义相关的一组重载函数的统一模式。函数模板的语法格式
如下:
·template是一个声明模板的关键字,typename是定义类型形式参数的关键字,
它可以用class替代,此处的class并不表示类,而是表示其后是一个类型形式参
数。类型形式参数名是用来抽象类型的标识,可以用来指明函数形参的类型、
函数返回值的类型及函数体内局部变量的类型。
6.2函数模板
6.2.1函数模板的定义
·函数模板提供一种用来自动生成各种类型函数实例的机制,编程者对于函数形式
参数类型和返回类型中的全部或者部分类型进行参数化而函数体保持不变,因此
函数模板能很好地实现代码重用。
初心至善匠心套人