国家二级(C++)机试模拟试卷277
选择题
1.运算符重载是对已有的运算符赋予多重含义,因此( )。(C)
A. 可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义
B. 可以改变一个已有运算符的优先级和操作数个数
C. 只能重载C++中已经有的运算符,不能定义新运算符
D. C++中已经有的所有运算符都可以重载
解析:重载运算符的规则如下:①C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载;②C++不能重载的运算符只有5个;③重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是C++的标准类型。故本题答案为C。
2.由于常对象不能被更新,因此( )。(A)
A. 通过常对象只能调用它的常成员函数
B. 通过常对象只能调用静态成员函数
C. 常对象的成员都是常成员
D. 通过常对象可以调用任何不改变对象值的成员函数
解析:本题考查常对象的基本知识,常对象只能调用它的常成员函数,而不能调用非const函数,常对象的成员函数不一定都是常成员函数,只需保证其数据成员是常数据成员即可。所以本题选A。
3.设程序如下:
#include
using namespace std;
int main()
{
int**p,*q,r=10;
q=&r;
p=&q;
cout<<**p+1<<end1;
return 0:
}
以上程序的输出结果是( )。(C)
A. p的地址
B. r的地址
C. 11
D. 运行错误
解析:p为一个二级指针,其存放的是指针变量q的地址,而q存放的又是r的地址。故式子**p相当于对r的引用。所以最后输出的结果为11。
4.关于在调用模板函数时模板实参的使用,下列表述中正确的是( )。(D)
A. 对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略
B. 对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略
C. 对于虚拟类型参数所对应的模板实参,若能够省略则必须省略
D. 对于常规参数所对应的模板实参,任何情况下都不能省略
解析:在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表(用“<>”括起来的参数表)或从模板函数实参表(用“()”括起来的参数表)。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则空表“<>”也可以不要,因此选项D错误。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省略;或者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,则其自身还是不能省略。
5.在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是( )。(A)
A. ios_base::cur
B. ios base::beg
C. ios_base::out
D. ios base::end
解析:streamoff定义于iostream.h中,定义有偏移量offset所能取得的最大值,seek_dir表示移动的基准位置,是一个有以下值的枚举:ios::beg:(文件开头)、ios::cur:(文件当前位置)、ios::end:(文件结尾)。
6.下面不属于C++的预定义的流对象是( )。(B)
A. cin
B. iostream
C. clog
D. cerr
解析:C++中的四个预定义流对象:cout,cin,cerr,clog。
7.有以下程序段:
#include
#define MAX(x,y)(x)>(y)?(x):(y)
void main()
{int i,j,k;
i=10;
j=15;k=MAX(i,j)*10;
cout<<k<<endl;
}
程序执行后的输出结果是( )。(C)
A. 15
B. 100
C. 150
D. 10
解析:题目程序中的MAX函数是利用条件运算符为?:求最大值。即(x>y)?(x):(y)是当x大于y时取x,否则取y。当i:10,j=15时,“MAX(i,j)”的值为15,所以“k=MAX(i,i)*10;”答案为:150。
8.有以下程序:
#include
using namespace std;
class R
{
public:
R(int r1,int r2)
{
R1=r1;
R2=r2;
}
voidprint();
void print()const;
private:
int R1,R2;
};
void R::print0
{
cOut<<R1<<“(C )
A. 5,4
B. 4,5
C. 20,52
D. 52,20
解析:此题中,语句R a(5,4)调用构造函数R(int r1,int r2)但未有输出结果;b.print();调用常成员函数(因为b是常对象)voidprint()const,输出结果是20,52。
9.有如下程序:
#include
using namespaee std;
class Book{
public:
Book(char*t=\\(D)
A. char ag Category();
B. char*Category()const;
C. virtual char*Category()const;
D. virtual char木Category()const=0;
解析:本题考查纯虚函数和抽象类,纯虚函数是在声明虚函数时被“初始化”为0的函数,包含纯虚函数的类为抽象类,抽象类是不能被实例化的,但是可以定义指向抽象类数据的指针变量,当派生类成为具体类后,就可以用这种指针指向派生类的对象,然后通过该指针调用虚函数,实现多态性的操作。所以本题答案为D。
10.下列对重载函数的描述中,( )是错误的。(A )
A. 重载函数中不允许使用默认参数
B. 重载函数中编译是根据参数表进行选择<
本文档预览:3600字符,共14739字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载