实验12(模板)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十二C++模板
一、实验目的
1、掌握C++模板的概念。
2、能够使用类模板来创建一组相关类型。
3、能够区别函数模板和模板函数、类模板和模板类。
4、理解前捆绑与后捆绑的异同。
5、理解如何重载模板函数。
二、实验内容及步骤
1、填空
(1)利用模板,通过一个代码段,便可以制定整个作用域的相关类,这种类称为_______. (2)类模板也可称为___________类型。
(3)定义函数模板时使用的关键字是。
(4)类模板不同于函数模板类模板只可用型函数。
2、已知intDBL(int n){return n + n;}和longDBL(long n){return n+n;}是一个函数模板的两个实例,则该函数模板的定义是?
3、已知一函数模板定义为
template
则函数调用incre(5.0) 使用得该函数模板产生的实例化函数为:____________________ 4、下列模板的定义是否合法的?若为非法的,请简单扼要说明理由。
(1) template
(2) template
(3) template
(4) template
(5) template
(6) template
5、选择题
(1)模板对类型的参数化提供了很好的支持,因此
A)类模板的主要作用是生成抽象类
B)类模板实例化时,编译器将根据给出的模板实参生成一个类
C)在类模板中的数据成员都具有同样类型
D)类模板中的成员函数都没有返回值
(2)有如下函数模板:
template T cast(U u){return u;}
其功能是将U类型数据转换为T类型数据。已知i为int型变量,下列对模板
函数cast的调用中正确的是
A)cast(i);B)cast<>(i);
C)cast(i);D)cast(i);
(3)下列关于模板的叙述中,错误的是
A)模板声明中的第一个符号总是关键字template
B)在模板声明中用<和>括起来的部分是模板的形参表
C)类模板不能有数据成员
D)在一定条件下函数模板的实参可以省略
(4)有如下函数模板定义:
template
T func(T x,T y){return x*x+y*y;}
在下列对func的调用中,错误的是
A)func(3,5);B)func(3.0,5.5);
C)func(3,5.5);D)func
6、简答题
(1)什么是模板,为什么要引入模板?
(2)函数模板如何定义,模板函数和函数模板有何关系?
(3)类模板如何定义,模板类和类模板之间的关系是什么?
7、编写程序
(1)定义一个函数模板,先交换两个int变量的值,然后交换两个float变量的值。
(2)定义一个函数模板求数组的最大值,并在主程序中用3个不同的数组进行验证。
(3)[附加题]尝试定义一个栈类模板,实现压入数据和抛出数据,并在主程序中进行验证。