二级C++分类模拟286
(总分69.5, 做题时间90分钟)
选择题
1.
下列程序的输出结果是 ____ 。
#include<iostream.h>
void main()
{
char*Str;
str="testI";
cout<<str[5];
}
#include<iostream.h>
void main()
{
char*Str;
str="testI";
cout<<str[5];
}
A test!
B test
C 空字符
D 异常
该问题分值: 2
答案:C
[解析] 字符指针str值为“test!”,它们的下标由0开始,并且具有一个尾符,输出str[5]的位置为尾符标识,指针字符指向的尾符为空。所以答案为空字符,即选项C正确。
2.
字符串复制函数已知在一个类体中包含如下函数原型:VOLUMEOPER ATOR-(VOLUME)const;,下列关于
这个函数的叙述中,错误的是______。
A 这是运算符一的重载运算符函数
B 这个函数所重载的运算符是一个一元运算符
C 这是一个成员函数
D 这个函数不改变类的任何数据成员的值
该问题分值: 1
答案:B
[解析] 本题考核运算符的重载。题中语句为运算符一这是一个二元运算符,且是作为常成员函数来重载的,所以它不能更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。
3.
有如下类定义:
class Bag{
public:
Bag(int p=200, char s="M"):price(p), size(s) {cout<<size; }
private:
int price;
char size;
};
若执行语句Bag Alice, Kelly(Mice), *Twins[2], F4[4];
则输出结果为______。
class Bag{
public:
Bag(int p=200, char s="M"):price(p), size(s) {cout<<size; }
private:
int price;
char size;
};
若执行语句Bag Alice, Kelly(Mice), *Twins[2], F4[4];
则输出结果为______。
A MMMMMMMM
B MMMMMM
C MMMMM
D MMMM
该问题分值: 1
答案:C
[解析] 首先Bag Alice语句,会调用默认构造函数Bag(int p=200,char s="M"),输出size的值M;接着Bag Kelly(Alice)语句会调用编译器生成的复制构造函数,完成初始化,复制构造函数只负责初始化成员变量,没有输出语句;Bag *Twins[2]定义一个Bag*类型的数组,包含两个Bag*类型的元素,并不会构造Bag对象,没有输出;而:Bag F4[4]定义了一个Bag类型的数组,包含4个Bag类型的元素,同时这4个元素会使用默认构造函数完成初始化,所以调用Bag(int p=200,char s="M"),输出4个M。综上,输出结果为MMMMM,答案为C选项。
4.
数据的存储结构是指______ 。
A 存储在外存中的数据
B 数据所占的存储空间量
C 数据在计算机中的顺序存储方式
D 数据的逻辑结构在计算机中的表示
该问题分值: 2
答案:D
[解析] 计算机存储的相关概念。
5.
下列关于模板的叙述中,错误的是______。
A 调用模板函数时,在一定条件下可以省略模板实参
B 可以用int、double这样的类型修饰符来声明模板参数
C 模板声明中的关键字class都可以用关键字typename替代
D 模板的形参表中可以有多个参数
该问题分值: 1
答案:C
[解析] 本题考查类模板是类的抽象,类是类模板的实例。函数模板允许使用多个类型参数,但在template定义部分的每个形参前必须有关键字typename或class;模板的类型参数由关键字class或关键字typename及其后的标识符构成,(在标准C++之前关键字typename没有被支持,把这个关键字加入到C++中的原因是因为有时必须要靠它来指导编译器解释模板定义。)本题C选项错误。
6.
当使用fstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为 ____ 。
A ios::in
B ios:: out
C ios::in lios::out
D 以上都不对
该问题分值: 1
答案:D
7.
有如下程序:
#include<iostream>
#include<iostream>
using namespace std;
class XX{
int x;
public:
XX(int XX=0):x(xx){}
int getX(){return x;}
};
class YY:public XX{
int y;
public:
YY(int xx,int yy):XX(xx),y(yy){}
int getV(){return getX()+y;}
};
int main(){
YY c(3,4);
class XX{
int x;
public:
XX(int XX=0):x(xx){}
int getX(){return x;}
};
class YY:public XX{
int y;
public:
YY(int xx,int yy):XX(xx),y(yy){}
int getV(){return getX()+y;}
};
int main(){
YY c(3,4);
cout<<c.getV()+c.getX()<<endl;
return 0;
}
运行这个程序的输出结果是______。
return 0;
}
运行这个程序的输出结果是______。
A 3
B 4
C 7
D 10
该问题分值: 2
答案:D
[解析] 由于类YY公开继承自类XX,所以执行表达式e.getV()+c.getX()的值等于3+3+4=10。
8.
通过派生类的对象可直接访问其______。
A 公有继承基类的公有成员
B 公有继承基类韵私有成员
C 私有继承基类的公有成员
D 私有继承基类的私有成员
该问题分值: 2
答案:A
[解析] 基类的私有成员在派生类中都是不能访问的,所以选项B、D是错误的,基类的公有成员通过私有继承后,在派生类中变为了私有成员,只能在派生类中进行访问,而通过派生类
的对象不能访问,所以选项C也是错误的。基类的公有成员通过公有继承后,在派生类中是公有成员,所以可以通过派生对象来访问。
9.
要定义一个具有5个元素的一维数组vect,并使其各元素的初值依次是30,50,-88,0和0,则下列定义语句中错误的是______。
A int vect[]={30,50,-88};
B int vect[]={30,50,-88,0,0};
C int vect[5]=(30,50,-88};
D int vect[5]={30,50,-88,0,0};
该问题分值: 2
答案:A
[解析] 此题考查的是一维数组定义时的初始化。当数组声明时没有给出数组的大小但是有初始化列表时,数组的大小就由列表中元素的个数来确定。所以选项A中数组只定义3个元素,不符合题目。
10.
下列关于类和对象的叙述中,错误的是 ____ 。
A 一个类只能有一个对象
B 对象是类的具体实例
C 类是对某一类对象的抽象
D 类和对象的关系是一种数据类型与变量的关系
该问题分值: 2
答案:A
11.
下列表达式的值为false的是 ____ 。
A 1<3&&5<7
B !(2>4)
C 3&0&&l
D !(5<8)||(2<8)
该问题分值: 2
答案:C
[解析] false为逻辑常量,即假。选项A)为1小于3并且5小于7,这个是真的;选项)B是2不大于4也为真;选项D)是5大于8或者2小于8,只要有一个为真,D就为真,所以选项D)也为真。选项C)中“&”为按位的与运算,3和0按位与,然后再与 1,结果为假。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论