首页 > 全部 > 二级C++ > 国家二级C++机试(运算符重载、模板和C++流)模拟试卷3

国家二级C++机试(运算符重载、模板和C++流)模拟试卷3

本单篇文档共6729字,内容预览3600字,预览为有答案版,源文件无水印,下载后包含无答案空白卷版和有答案版,同时也有计算机类NCRE全国计算机二级整科真题模拟题,讲义课件,思维导图,易错高频题等下载。
二级C++ 章节练习 3094人下载
价格: 0.60 原价:¥8.00
收藏

国家二级C++机试(运算符重载、模板和C++流)模拟试卷3

选择题

1.下列关于函数模板的描述中,正确的是( )。(D)

A. 函数模板是一个实例函数

B. 使用函数模板定义的函数没有返回类型

C. 函数模板的类型参数与函数的参数相同

D. 通过使用不同的类型参数,可以从函数模板得到不同的实例函数

解析:函数模板是一系列相关函数的模型或样板,这些函数的源代码相同,只是所针对的数据类型不同。数据类型成了函数模板的参数,所以函数模板是一种参数化类型的函数。

2.有如下函数模板定义:

template<typename T1,Typename T2>

T1 Fun(T2 n){ return n*5.0;}

若要求以int型数据9作为函数实参调用该模板,并返回一个double型数据,则该调用应表示为( )。(C)

A. FUN(9)

B. FUN<9>

C. FUN<double>[9]

D. FUN<9>(double)

解析:根据函数模板的定义,在选项C的调用中,把double类型传递给T1,int型传递给T2。

3.已知主函数中通过如下语句序列实现对函数模板swap的调用:

int a[10],b[10];

swap(a,b,10);

下列对函数模板swap的声明中,会导致上述语句序列发生编译错误的是( )。(B)

A. template<typename T>

void swap(T a[],T b[],int size);

B. template<typename T>

void swap(int size,T a[],T b[]);

C. template<typename T1,typename T2>

void swap(T1 a[],T2 b[],int size};

D. template<class T1,class T2>

void swap(T1 a[],T2 b[],int size);

解析:由题目中函数swap(a,b,10)调用语句可知,在对函数模板swap的声明语句中,应将第一、二个参数设为数组变量,第三个参数为整型变量。

4.在定义函数模板或类模板时,开头的保留字是( )。(B)

A. typename

B. template

C. class

D. typedef

解析:定义函数模板或类模板时,开头的保留字是template。

5.若有函数模板mySwap和一些变量定义如下:( )。

template<class T>void mySwap(T x,T y);

double d1,d2;int i1,i2;

下列对mySwap的调用中,错误的是(C)

A. mySwap(i1,i2)

B. mySwap(d1,d2)

C. mySwap(i1,d 1)

D. mySwap<int>(i2,d2)

解析:按照函数模板mySwap的定义,变量x和y应该是同一类型,而在选项C的定义中变量i1和d1属于不同的数据类型。

6.模板对类型的参数化提供了很好的支持,因此( )。(B)

A. 类模板的主要作用是生成抽象类

B. 类模板实例化时,编译器将根据给出的模板实参生成一个类

C. 在类模板中的数据成员都具有同样类型

D. 类模板中的成员函数都没有返回值

解析:此题考查了类模板的概念。在定义对象的过程中,系统会自动地根据需要生成相应的类定义,这种依据类模板生成具体类的过程称为类模板的实例化。

7.关于关键字class和typename,下列表述中正确的是( )。(A)

A. 程序中的typename都可以替换为class

B. 程序中的class都可以替换为typename

C. 在模板形参表中只能用typename来声明参数的类型

D. 在模板形参表中只能用class或typename来声明参数的类型

解析:此题考查的是class和typename两个关键字。关键字class除了能用来定义类以外还能用来声明模板的虚拟类型参数。在用作声明虚拟类型参数时typename与class可以互换,但不能使用typename来定义类;在模板形参表中除了可以用typename和Class声明虚拟类型参数外,还可以使用普通类型声明常规函数,故选项C错误。

8.下列模板声明中,有语法错误的是( )。

D

解析:第四个选项是定义类模板的,但是class前面的T是多余的。对于第二个选项,同一个类的对象相乘还是同一个类的对象,但是可能要考虑溢出的问题。

9.在定义一个类模板时,模板形参表是用一对括号括起来的,所采用的括号是( )。(C)

A. ( )

B. [ ]

C. < >

D. { )

解析:声明一个类模板的格式是:template<<模板形参声明>><类声明>。

10.有如下模板声明:

template<typename T 1,typename T2>ClaSS A;

下列声明中,与上述声明不等价的是( )。(D)

A. template<class T1,class T2>class A;

B. template<class T1,typename T2>class A;

C. template<typename T1,class T2>class A;

D. template<typename T1,T2>class A;

解析:在类模板中,数据类型本身成了它的参数,因而是一种参数化类型的类,是类的生成器。声明一个类模板的格式是:template<<模板形参表声明>><类声明>,<模板形参表声明>是由一个或多个模板形参组成。对于本题来说,模板形参表中包括类型T1和T2两个类型参数,而在选项D)中T1说明其类型,而T2没有说明其类型,与题干中的模板说明不一致。

11.若MyTemp是一个只有一个虚拟类型参数的类模板,且有如下语句序列

MyTemp<double>p2;

MyTemp<long>p3[2];

编译系统在处理上面的语句序列时,所生成的模板MyTemp的实例的个数是( )。(C)

A. 1

B. 2

C. 3

D. 0

解析:p2是一个double型的MyTemp,p3[2]是一个long.型MyTemp数组,其中包括两个元素。所以共有3个MyTemp的实例。

12.下列关于模板的叙述中,错误的是( )。(D)

A. 调用模板函数时,有时可以省略模板实参

B. 函数模板的每个实例就是一个函数定义

C. 类模板的每个实例就是一个类定义

D. 类模板的实例是一个类对象

解析:在定义对象的过程中,编译系统会自动地根据需要生成相应的类定义,这种依据类模板生成类定义的过程称为类模板的实例化。类模板实例化所生成的每一个类定义就是相应类模板的一个实例。

13.下列类模板的定义中语法格式错误的是( )。

本文档预览:3600字符,共6729字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载

剩余未完,查看全文
收藏
国家二级C++机试(运算符重载、模板和C++流)模拟试卷3

推荐资源

客服

扫码添加客服微信

热线

官方客服

如遇问题,请联系客服为您解决

电话客服:

客服微信:pujinet

工作时间:9:00-18:00,节假日休息

公众号

扫码关注微信公众号