文档介绍:该【软件技术基础作业—模板编程 】是由【niuww】上传分享,文档一共【32】页,该文档可以免费在线阅读,需要了解更多关于【软件技术基础作业—模板编程 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。函数、类模板
《软件技术基础》补充2
电子科技大学物理电子学院
赖生建
主要内容
模板的概念
函数模板
类模板
《软件技术基础》补充2—模板******@
2
1模板的概念
模板的引入
《软件技术基础》补充2—模板******@
3
classCompare_int
{
public:
Compare(inta,intb)
{x=a;y=b;}
intmax()
{return(x>y)?x:y;}
intmin()
{return(x<y)?x:y;}
private:
intx,y;
};
classCompare_float
{
public:
Compare(floata,floatb)
{x=a;y=b;}
floatmax()
{return(x>y)?x:y;}
floatmin()
{return(x<y)?x:y;}
private:
floatx,y;
}
这两个类的功能是对两个整数(浮点数)作比较,可以通过调用成员函数max和min得到两个整数中的大者和小者。
两个或多个类,其功能是相同的,仅仅是数据类型不同,能否有办法减少重复性的工作?
1模板的概念
《软件技术基础》补充2—模板******@
4
C++在发展的后期增加了模板(template)的功能,提供了解决这类问题的途径。可以声明一个通用的类模板,它可以有一个或多个虚拟的类型参数。如对以上两个类可以综合写出以下的类模板:
template<classnumtype>//声明一个模板,虚拟类型名为numtype
classCompare//类模板名为Compare
{
public:
Compare(numtypea,numtypeb)
{x=a;y=b;}
numtypemax()
{return(x>y)?x:y;}
numtypemin()
{return(x<y)?x:y;}
private:
numtypex,y;
};
1模板的概念
《软件技术基础》补充2—模板******@
5
请将此类模板和前面第一个Compare_int类作一比较,可以看到有两处不同:
(1)声明类模板时要增加一行:template<class类型参数名>
(2)原有的类型名int换成虚拟类型参数名numtype
在建立类对象时,如果将实际类型指定为int型,编译系统就会用int取代所有的numtype,如果指定为float型,就用float取代所有的numtype,这样就能实现“一类多用”。
如果说类是对象的抽象,对象是类的实例,则类模板是类的抽象,类是类模板的实例。
利用类模板可以建立含各种数据类型的类。
Compare<int>cmp(4,7);
即在类模板名之后在尖括号内指定实际的类型名,在进行编译时,编译系统就用int取代类模板中的类型参数numtype,这样就把类模板具体化了,或者说实例化了。
1模板的概念
《软件技术基础》补充2—模板******@
6
//
template<classnumtype>//声明一个模板,虚拟类型名为numtype
classCompare//类模板名为Compare
{
public:
Compare(numtypea,numtypeb)
{x=a;y=b;}
numtypemax()
{return(x>y)?x:y;}
numtypemin()
{return(x<y)?x:y;}
private:
numtypex,y;
};
#include<>
intmain()
{
Compare<int>cmp_i(4,7);
intimax=();
cout<<"Max:"<<imax<<endl;
Compare<float>cmp_f(,);
floatfmax=();
cout<<"Max:"<<fmax<<endl;
return1;
}
1模板的概念
模板概念
它可以实现类型参数化,即把函数或类中的数据类型定义为参数,从而解决参数多态性问题,实现代码可重用性
模板分类(按用途)
函数模板
类模板
参数实例化
指给函数模板或类模板带入实际的类型参数
C++中把经过参数实例化的函数模板称为模板函数,把经过参数实例化的类模板称为模板类
《软件技术基础》补充2—模板******@
7
1模板的概念
模板、模板函数、模板类和对象之间的关系
《软件技术基础》补充2—模板******@
8
模板
函数模板
类模板
模板函数
模板类
对象
对象
对象
参数实例化
参数实例化
2函数模板
函数模板的定义
《软件技术基础》补充2—模板******@
9
一般定义格式:
template<模板参数表>
返回类型函数名(函数模板形参表)
{
函数体
}
设计一个求两个数中较大数的函数模板
template<classT>
Tmax(Tx,Ty)
{
return(x>y)?x:y;
}
template<typenameT>
Tmax(Tx,Ty)
{
return(x>y)?x:y;
}
2函数模板
模板函数的生成(函数模板的实例化)
基本概念
函数模板在具体调用时必须进行参数实例化
经参数实例化而生成的具体函数称为模板函数
对模板形参进行实例化的参数称为模板实参
生成模板函数的方法
显式方法:在函数模板调用前,用基本数据类型或用户自定义数据类型对函数模板进行参数实例化,生成模板函数
《软件技术基础》补充2—模板******@
10
intmyIntX=5,myIntY=8,myIntC;
floatmyFloatX=,myFloatY=,myFloatC;
intmax(intx,inty);
myIntC=max(myIntX,myIntY);
floatmax(floatx,floaty);
myFloatC=max(myFloatX,myFloatY);