二级C++分类模拟274.docx
- 文档编号:27136941
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:19
- 大小:22.64KB
二级C++分类模拟274.docx
《二级C++分类模拟274.docx》由会员分享,可在线阅读,更多相关《二级C++分类模拟274.docx(19页珍藏版)》请在冰豆网上搜索。
二级C++分类模拟274
二级C++分类模拟274
(总分:
77.50,做题时间:
90分钟)
一、选择题(总题数:
40,分数:
77.50)
1.有如下程序:
#include<iostream>
usingnamespacestd;
classTlestClass
{
intn;
public:
TestClass(intk):
n(k){}
intget(){returnn;}
intget()const{returnn+1;}
};
intmain()
{
TestClassp(5);
constTestClassq(6);
cout<<p.get()<<q.get();
return0;
}
执行后的输出结果是______。
(分数:
2.50)
A.55
B.57 √
C.75
D.77
解析:
[解析]C++中对常对象的成员函数调用,将自动调用其常成员函数,程序中调用原型为"intget()const;"的函数,对于非常对象将调用原型为"intget();"的函数。
因为首先用5对对象p进行了初始化,所以执行p.get()时直接返回5,而对于常对象则以6对q进行初始化。
在调用q.get()时,将调用原型为"intget()const;"的函数,该函数将返回n+1,第二个输出应为7,所以本题答案为57。
2.在“文件包含”预处理语句的使用形式中,当#include后面的文件名用””括起时,寻找被包含文件的方式是
(分数:
2.00)
A.直接按系统设定的标准方式搜索目录 √
B.先在源程序所在的目录搜索,再按系统设定的标准方式搜索
C.仅仅搜索源程序所在目录
D.仅仅搜索当前目录
解析:
[解析]本题考查在include中.采用不同的符号,如<>或"",编译器搜索方式的不同。
3.已知在一个类体中包含如下函数原型:
VOLUMEOPERATOR-(VOLUME)const;,下列关于这个函数的叙述中,错误的是______。
(分数:
1.00)
A.这是运算符一的重载运算符函数
B.这个函数所重载的运算符是一个一元运算符 √
C.这是一个成员函数
D.这个函数不改变类的任何数据成员的值
解析:
[解析]本题考核运算符的重载。
题中语句为运算符一这是一个二元运算符,且是作为常成员函数来重载的,所以它不能更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。
4.若MyClass是一个类名,且有如下语句序列
MyClassc1,*c2;
MyClass*c3=newMyClass;
MyClass&c4=c1;
上面的语句序列所定义的类对象的个数是______。
(分数:
2.00)
A.1
B.2
C.3 √
D.4
解析:
[解析]C1、*C2、C3是3个MyClass对象,C4是MyClass对象的引用,它是对象C1的别名。
5.下列关于函数模板的描述中,正确的是______。
(分数:
1.00)
A.函数模板是一个实例函数
B.使用函数模板定义的函数没有返回类型
C.函数模板的类型参数与函数的参数相同
D.通过使用不同的类型参数,可以从函数模板得到不同的实例函数 √
解析:
[解析]函数模板只是声明了一个函数的描述即模板,不是一个可以直接执行的函数,只有根据实际情况用实参的数据类型参数标识符之后,才能产生真正的函数。
6.以下程序的输出结果是____。
#include<iostream.h>
voidfunc(char**m)
{
++m:
cout<<*m<<end1;
}
voidmain()
{
staticchar*a[]={"MORNING","AFTERTOON","EVENING"};
char**n:
n=a;
func(n);
}
(分数:
1.00)
A.为空
B.MORNING
C.AFTERTOON √
D.EVENING
解析:
7.有如下程序:
#include<iostream>
usingnamespacestd;
classB{
public:
virtualvoidshow(){cout<<"B";}
};
classD:
publicB{
public:
voidshow(){cout<<"D";}
};
voidfunl(B*ptr){ptr->show();}
voidfun2(B&ref);ref.show();}
voidfun3(Bb){b.show();}
intnlain(){
Bb,*P=DewD;
Dd;
funl(p);
fun2(b);
fun3(d);
return0;
}
程序的输出结果是
(分数:
2.00)
A.BBB
B.BBD
C.DBB √
D.DBD
解析:
[解析]基类指针可以指向派生类对象,在对象作为参数传递时,是通过“传值调用”传递给函数的,是单向传递。
使用对象指针对函数参数进行传递时,是通过“传址调用”传递给函数的,即函数的形参对象和实参对象指针变量指向同一内存地址;使用对象引用作为函数参数时,也是通过“传址调用”传递给函数的。
funl(p)传递的是类D对象的地址,所以调用类D的是show(),fun2(b)调用的和传递的都是类B的对象引用,所以调用类B的show()。
调用’fun3(d)时,由于voidfun3(Bb)传递的虽然是D类对象,但是形参是B类对象,所以调用基类B的show()。
8.对于类定义:
classA{
public:
virtualvoidfunc1(){}
voidfunc2(){}
};
classB:
publicA{
public:
voidfunc1(){cout<<"classBfune1"<<endl;}
virtualvoidfunc2(){cout<<"classBfunc2"<<endl;}
};
下面正确的叙述是()。
(分数:
1.00)
A.A:
:
func2()和B:
:
func1()都是虚函数
B.A:
:
func2()和B:
:
func1()都不是虚函数
C.B:
:
funcl()是虚函数,而A:
:
func2()不是虚函数 √
D.B:
:
func1()不是虚函数,而A:
:
func2()是虚函数
解析:
[解析]基类中说明的虚函数,在派生类中自然就是虚函数,所以类B中funcl()是虚函数;而类A中的func2()没有被关键字virtual修饰,所以不是虚函数。
9.若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是______。
(分数:
2.50)
A.operatorlong()const; √
B.operatorlong(BigNumber);
C.longoperatorlong()const;
D.longoperatorlong(BigNumber);
解析:
[解析]类型转换符必须作为成员函数重载。
在重载类型转换符时,其类型名就是返回值类型,因此不需要声明返回值的类型。
重载类型转换符“long”的形式如下:
operatorlong(参数表);
10.在下面程序中,编译时出现错误的是______。
ClassA//
(1)
{
public:
//
(2)
A(){
f();//(3)
}
voidB(){
f();
}
virtualvoidf()const=0;//(4)
};
(分数:
2.00)
A.
(1)
B.
(2)
C.(3) √
D.(4)
解析:
11.将x+y*z中的“+”用成员函数重载,“*”用友元函数重载应写为______。
(分数:
2.50)
A.operator+(operator*(y,z)
B.operator+(operator*(y,z)) √
C.operator+(x*(y,z))
D.x+(operator*(y,z)
解析:
[解析]在定义了重载运算符后的函数后,函数operator+重载了运算符“+”。
如果在类以外的其他地方定义了一个函数,在类体中用friend对该函数进行声明,此函数就称为本类的友元函数。
“*”用友元函数重载就是运算符函数不作为成员函数,而把它放在类外,“.*”被改写为“operator*”。
“+”为成员函数重载,x.operator+。
所以“x+y*z”被改写为“x.operator+(operator*(y,z))”。
12.有如下函数定义:
voidfunc(inta,int&b){a++;b++;}
若执行代码段:
intx=0,y=1
func(x,y);
则变量x和y值分别是______。
(分数:
2.50)
A.0和1
B.1和1
C.0和2 √
D.1和2
解析:
[解析]本题考查函数参数传递方式。
func中第1个参数为值传递方式,第2个为引用传递方式。
函数调用后,实参x不受形参a的影响,x的值还是0;y的值跟着形参b变化为2。
13.在重载一个运算符函数时,其参数表中没有任何参数,这说明该运算符是______。
(分数:
3.00)
A.一元非成员运算符
B.一元成员运算符 √
C.二元非成员运算符
D.二元成员运算符
解析:
14.对于循环队列,下列叙述中正确的是______。
(分数:
2.50)
A.队头指针是固定不变的
B.队头指针一定大于队尾指针
C.队头指针一定小于队尾指针
D.队头指针可以大于队尾指针,也可以小于队尾指针 √
解析:
[解析]所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。
在循环队列结构中.当存储空间的最后一个位置已被使用而再要进行八队运算时,只要存储空间的第一个位置空闲,可将元素加入到第一个位置,即将存储空闲的第一个位置作为队尾。
15.编译时的多态性可以通过使用____获得。
(分数:
1.00)
A.虚函数和指针
B.重载函数和析构函数
C.虚函数和对象 √
D.虚函数和引用
解析:
16.存取指针所指的值时,采用的运算符是______。
(分数:
2.50)
A.#
B.&
C.%
D.* √
解析:
[解析]对指针所指向的地址取值时,采用约存取运算符为*。
B为取地址符。
17.在开发一个C++程序的整个过程中,第3个步骤为______。
(分数:
2.50)
A.链接 √
B.运行
C.编辑
D.编译
解析:
[解析]在开发一个C++程序的整个过程中,经过以下几个步骤:
编辑→编洋→链接→运行。
故答案为A。
18.单个用户使用的数据视图的描述称为
(分数:
1.00)
A.外模式 √
B.概念模式
C.内模式
D.存储模式
解析:
[解析]选项A)正确,外模式是用户的数据视图,也就是用户所见到的数据模式;选项B)不正确,全局数据视图的描述称为概念模式,即数据库中全部数据的整体逻辑结构的描述;选项C)不正确,物理存储数据视图的描述称为内模式,即数据库在物理存储方面的描述;选项D)不正确,存储模式即为内模式。
19.有如下类定义:
classPoint{
private:
staticinthow_many;
};
______how_many=0;
要初始化Point类的静态成员how_many,下画线处应填入的内容是______。
(分数:
1.00)
A.int
B.staticint
C.intPoint:
:
√
D.staticintPoint:
:
解析:
[解析]本题考查静态数据成员,静态数据成员可以初始化,但只能在类体外进行初始化,其一般形式为:
数据类型类名:
:
静态数据成员名=初值。
所以本题答案为C。
20.有如下程序:
#include<iostream>
usingnamespacestd;
classMedia{
public:
voidName();
voidShow();
protected:
intpage;
};
classBook:
privateMedia{
public:
voidPrint(){cout<<page<<endl;}
voidShow(){Media:
:
Show();)//①
};
intmain(){
BookBible;
Bible.Name();//②
Bible.Print();//③
Bible.Show();//④
return0;
}
编译时有错误的是______。
(分数:
2.00)
A.语句①
B.语句② √
C.语句③
D.语句④
解析:
[解析]类Book私有继承自类Media,所以类Media中的公有成员函数Name()在继承类Book中变成了私有成员函数,因而类Book的对象Bible不能访问私有成员函数Name()。
21.下列程序的运行结果为______。
#include<iostream.h>
template<classTT>
classFF
{TTa1,a2,a3;
public:
FF(TTb1,TTb2,TTb3){a1=b1;a2=b2;a3=b3;}
TTSum(){returna1+a2+a3;));
voidmain()
{FF<int>x(int(1.1),2.3),y(int(4.2),5,6);
cout<<x.Sum()<<""<<y.Sum()<<encIl;}
(分数:
2.50)
A.6.115.2
B.615 √
C.615.2
D.6.115
解析:
[解析]本题考查模板函数的应用,表达式int(1.1)和int(4.2)是将1.1和4.2强制转换为整型。
22.有如下程序:
classBase{
public:
intdata;
};
classDerivedl:
publicBase{};
classDerived2:
protectedBase{};
intmain()
{
Derivedld1;
Derived2d2;
d1.data=0;//①
d2.data=0;//②
return0;
}
下列关于程序编译结果的描述中,正确的是______。
(分数:
1.00)
A.①②皆无编译错误
B.①有编译错误,②无编译错误
C.①无编译错误,②有编译错误 √
D.①②皆有编译错误
解析:
[解析]本题考查公用继承和保护继承对基类成员的访问属性。
在公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。
在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有。
本题中Dezived1公用继承。
Base,所以①编译正确,Derived2保护继承Base,所以②编译不正确。
23.下列关于运算符重载的叙述中,正确的是______。
(分数:
2.50)
A.通过运算符重载机制可以为C++语言扩充新的运算符
B.运算符重载的作用是使已有的运算符作用于类的对象 √
C.重载运算符的操作数类型可以全部为基本类型
D.所有运算符都可以被重载
解析:
[解析]运算符重载就是赋予已有的运算符多重含义。
C++中通过重新定义运算符,使它能够用于特定类的对象执行特定的功能,这便增强了C++语言的扩充能力。
24.在每个C++程序中必须有且仅有一个______。
(分数:
2.50)
A.函数
B.主函数 √
C.预处理指令
D.语句
解析:
[解析]在每一个C++程序中必须有且只有一个主函数,每个程序的执行都是从主函数的开始。
25.下列函数声明中,错误的是______。
(分数:
2.00)
A.voidfun(intx=0,inty=0);
B.voidfun(intx,inty=0);
C.voidfun(intx=0,inty); √
D.voidfun(intx,inty);
解析:
26.若有定义语句“doublex[5]={1.0,2.0,3.0,4.0,5.0},*p=x”,则错误引用x数组元素的是______。
(分数:
2.50)
A.*p
B.x[5] √
C.*(p+1)
D.*x
解析:
[解析]选项B中x[5]数组下标越界,数组的下标是从0开始的。
27.如果派生类以protected方式继承基类,则原基类的protected成员和public成员在派生类中的访问属性分别是______。
(分数:
1.00)
A.public和public
B.public和protected
C.protected和public
D.protected和protected √
解析:
[解析]本题考查保护继承中派生类对基类的访问属性,在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有,所以本题答案为D。
28.在对函数进行原型声明时,下列语法成分中,不需要的是______。
(分数:
2.00)
A.函数返回类型
B.函数参数列表
C.函数名
D.函数体 √
解析:
[解析]在C++中函数在使用之前要预先声明,这种声明在标准C++中称为函数原型。
函数给出了函数名、返回类型以及在调用函数时必须指明参数个数和类型。
29.在类中重载赋值运算符时,应将其声明为类的______。
(分数:
2.00)
A.静态函数
B.友元函数
C.成员函数 √
D.构造函数
解析:
30.下列叙述中正确的是
(分数:
2.00)
A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构
B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况
C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况
D.循环队列中元素的个数是由队头指针和队尾指针共同决定的 √
解析:
[解析]循环队列是线性表的一种,所以选项A错误。
循环队列的入队和出队需要由队尾指针和队头指针完成,所以选项B和c错误。
31.模块独立性是软件模块化所提出的要求,衡量模块独立性的度量标准则是模块的____。
(分数:
2.00)
A.抽象和信息隐蔽
B.局部化和封装化
C.内聚性和耦合性 √
D.激活机制和控制方法
解析:
[解析]衡量模块独立性的度量标准则是模块的内聚性和耦合性。
32.以下定义数组中错误的是
(分数:
2.00)
A.inta[10];
B.inta[2][120];
C.inta[20][]; √
D.inta[];
解析:
[解析]考查数组的定义方法。
[解题要点]定义一个二维数组时,可以不定义行数,但一定要定义列数,也就是说,选项C)若写成int[][20],则是正确的。
[考点链接]数组的下标是从零开始的。
33.下列关于虚基类的描述中错误的是
(分数:
2.00)
A.虚基类子对象的初始化由最派生类完成
B.虚基类子对象的初始化次数与虚基类下面的派生类个数有关 √
C.设置虚基类的目的是消除二义性
D.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出对虚基类构造函数调用
解析:
[解析]虚基类主要是为了消除在多重继承中的二义性问题。
实际上,说某个类是虚基类,并不是该类本身有什么特殊的地方,而是在继承的时候加上virtual修饰词。
虚基类不同于抽象类,虚基类是可以被实例化的,派生类初始化时,必须列出虚基类的构造函数调用。
虚基类对象的初始化次数只于对象的多少有关,与类的层次结构是没有关系的。
故本题正确答案为B。
34.已知类A有公用数据成员a,并重载了“=”运算符,且有Aobj2;constA*ptrnewA;则下列语句错误的是____。
(分数:
2.00)
A.ptr->a=100; √
B.ptr=&obj2;
C.ptr++;
D.obj2=*ptr;
解析:
[解析]本题考查const修饰符的作用。
注意:
const位置不同,其修饰的部分也是不同的。
本题中const修饰的是ptr所指的对象本身,所以,ptr是可以重新指向新的对象,而ptr->a则无法被更新。
35.有如下程序:
#include<iostream>
usingnamespacestd;
classBase
{
public:
voidfun1(){cout<<"Baseha/n";}
virtualvoidfun2(){cout<<"Base/n";}
};
classDerived:
publicBase
{
public:
voidfun1(){cout<<"Derived/n";}
voidfun2(){cout<<"Derived/n";}
};
voidf(Base&b){b.fun1();b.fun2();}
intmain()
{
Derivedobj;
f(obj);
return0;
}
执行这个程序的输出结果是______。
(分数:
2.00)
A.BaseBase
B.BaseDerived √
C.DerivedBase
D.DerivedDerived
解析:
[解析]此题考查的是虚函数的概念。
在C++语言中,一个派生类的对象可以被它的任何一个基类的指针所指向,若基类和派生类中存在一模一样的成员函数。
那么通过该基类指针调用这样的成员函数时,若这个成员函数被定义成虚函数,那么就调用派生类中的;否则就调用基类中的。
本题中,在f()函数中,形参b是一个基类的引用,它引用的是主函数中定义的派生类对象obj,所以在调用fun1()时,运行的是基类的版本,而fun2()运行的是派生类的版本。
36.若调用一个函数,且此函数中没有return语句,则正确的说法是该函数____。
(分数:
1.00)
A.没有返回值
B.返回若干个系统默认值
C.有返回值,但返回一个不确定的值 √
D.返回一个用户所希望的函数值
解析:
37.若有如下程序:
#include<iostream>
usingnamespacestd;
classTestClass
{
public:
voidwho(){cout<<"TestClass"<<endl;}
};
classTestClass1:
publicTestClass
{
public:
voidwho(){cout<<"TestClass1"<<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 C+ 分类 模拟 274