第七章作业内容(修改后带部分答案).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第七章作业内容(修改后带部分答案).doc》由会员分享,可在线阅读,更多相关《第七章作业内容(修改后带部分答案).doc(8页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、一 选择题1. 下列关于类模板中模板参数的叙述中,错误的是(D)A.模板参数可以作为数据成员的类型B.模板参数可以作为成员函数的返回类型C.模板参数可以作为成员函数的参数类型D.模板参数不能作为成员函数的局部变量类型2. 假设定义如下函数模板:template T max(T x,T y) return(xy)?x:y; 并定义了int i=3;char c=a;语句,正确的调用语句是:(D)A.max(“li”, ”Zhang”); B. max(int(i), c);C. max(i, c); D. max(c, i); 3. 下列程序段中有错的是(B)template /Aint i;
2、/ Bmyfunc(type1 x,type2 y) /C coutx yendl; /D4.下列关于类模板的说法中,正确的是(B)A. 在类模板外定义成员函数时,其成员函数和普通类成员函数的定义是一样的B. 在类模板外定义成员函数时,其成员函数前面必须包含模板参数的声明C. 类模板只能声明一个参数D. 类模板和函数模板一样,它的参数不可以具有默认值5(选作题)下列不是顺序容器的是(D)A. vector B. list C .deque D. map6(选作题)有如下定义:int ia7=0,1,1,2,3,5,8;,下面(D)是错误的A. vectorvectorivec;B. vecto
3、rivec=0,1,1,2,3,5,8;C. vectorivec(ia,ia+7);D. vectorsvec=ivec;7一个(C )允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能去任意类型。A.函数模板 B.模板函数 C. 类模板 D.模板类二 问答题1简述函数模板与模板函数、类模板与模板类的区别。答:函数模板就是实现数据类型参数化的函数定义,得到一个函数族。当函数中的数据成员、函数的返回值类型需要用未知类型进行抽象时,就需要定义函数模板,而模板函数是指在函数模板中需要使用函数时,用实际数据类型对类型参数自动实例化得到;函数模板是模板的定义,定义中用到通用类型参
4、数,它代表的是一类函数。而模板函数是实实在在的函数定义,它在编译系统遇到具体的函数调用时生成并具有代码,用来表示某一个具体函数。类模板如同函数模板一样,就是实现数据类型参数化的类定义,得到一个类族。在需要定义对象时,首先显式地将类模板中的类型参数实例化得到一个具体的类,这就是模板类。类模板与模板类之间是抽象与具体的关系,类模板是诸多拥有相同数据成员和成员函数的类在类型上加以抽象得到的类族,而模板类是类模板中的类型参数实例化以后得到的一个具体的类。2(选作题)数组和向量的主要区别是什么? 答:(1)声明方式不同。(2)向量可以使用赋值运算符、比较运算符。(3)可以用size()来测试向量中的元素
5、个数。(4)向量可以用at()进行有效索引测试,无合法元素则抛出异常。3(选作题)关联容器有哪四种?简单介绍它们是怎样组成的?各有什么特点?答:四个关联容器为:集合(set),多重集合(multiset),映射(map)和多重映射(multimap)。集合和多重集合类提供了控制数值集合的操作,其中数值是关键字,即不必另有一组值与每个关键字相关联。集合与多重集合类的主要差别在于多重集合允许重复的关键字(key),而集合不允许重复的关键字。集合和多重集合通常实现为红黑二叉排序树。元素的顺序由比较器函数对象(comparator function object)确定。如对整型multiset,只要用
6、比较器函数对象less排序关键字,元素即可按升序排列。映射和多重映射类提供了操作与关键字相关联的映射值(mapped value)的方法。映射和多重映射的主要差别在于多重映射允许存放与映射值相关联的重复关键字,而映射只允许存放与映射值一一对应的单一关键字。多重集合关联容器用于快速存储和读取关键字。多重映射和映射关联容器类用于快速存储和读取关键字与相关值(关键字/数值对,key/value pair)。4函数模板与同名的非模板函数重载时,调用的顺序是怎样的?答:C+中,函数模板与同名的非模板函数重载时,调用的顺序如下: 找一个参数完全匹配的函数,若有就调用它; 找一个函数模板,实例化为模板函数,
7、若有就调用它; 若(1)、(2)失败,再找低一级的对函数重载的函数(隐式类型转换等),若有就调用它; 若(1)(2)(3)都未有,则出错。三读程序按要求作答1写出下面程序的执行结果,分析注释部分的原因。 #include template class Sample T n; public: Sample(T i)n=i; void operator+(); void disp()coutn=nendl; ; template void Sample:operator+() n+=1; / 这里不能用n+;因为double型不能用+ void main() Sample s(a); s+; s.
8、disp(); 解: 本题说明类模板的使用方法。Sample是一个类模板,由它产生模板类Sample,通过构造函数给n赋初值,通过重载+运算符使n增1,这里n由a增1变成b。 所以输出为:n=b2请将程序补充完整,使输出结果为:a 数组最大值:9 b 数组最大值:9.2要求:将求最大值的函数设计成函数模板。 本题程序如下: #include _(1)_ _(2)_ int i; T maxv=x0; for(i=1;in;i+) if(maxvxi) maxv=xi; return maxv; void main() int a=4,5,2,8,9,3; double b=3.5,6.7,2,
9、5.2,9.2; couta数组最大值:max(a,6)endl; coutb数组最大值:max(b,5)endl; 解: (1) 填写:template (2) 填写:T max(T x,int n) 3程序的输出结果已给出,请将程序补充完整,完成类模板成员函数的定义,使得程序输出结果为:s1与s2的数据成员相等s3与s4的数据成员不相等Press any key to continue已给程序为:#include#includeusing namespace std;_(1)_ class SampleT n;public:Sample(T i)n=i;int operator=(Samp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七 作业 内容 修改 部分 答案
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内