国家二级(C++)机试模拟试卷522
选择题
1.分析下面程序,该程序的运行结果是( )。
#include
class TestClass
{
public:
static int m:
TestClass()
{
m++十一t-;
}
TestClass(int 11)
{
m=n:
}
static void test()
{
m++:
}
};
int TestClass::m=0;
void main()
{
TestClass A;
TestClass B(3);
A.test();
TestClass::test();
cout<<”m=”<<B.m<<endl;
}(C )
A. m=3
B. m=4
C. m=5
D. m=6
解析:由主函数main入手,首先定义Te8tClass对象A,B;对象B构造函数值为3,构造函数中m++,所以这时m=4。主函数中调用A.test(),因为“static int m;”,m被定义为类TestClass静态成员变量,当它的值改变后,则在各对象中这个数据成员的值都同时改变了。所以这里执行“A.test();”中的m为前面进行加1操作后的4,即m现在的值为5。
2.执行语句序列
int x=1,&y=x;
cout<<x<<’一’<<y<<endl;
输出结果为( )。(B)
A. x—x
B. 1—1
C. 1一0
D. 异常
解析:程序中的“int x=1”定义x为int型变量,并赋值为1。语句“&y=x”中“&”为引用运算符,&y=x语句可以理解为y具有x的地址,所以y的值也是1,即输出为:1-1。
3.下列关于this指针的描述中,正确的是( )。(D)
A. 类的成员函数都有this指针
B. 类的友元函数都有this指针
C. 任何与类相关的函数都有this指针
D. 类的非静态成员函数都有this指针
解析:this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员时,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。另外,全局函数和静态函数都不能使用this指针。所以答案为D。
4.如果有以下定义及初始化:
int a=3,*p=&a;
则由此可以推断,*p的值是( )。(A)
A. 变量a的值,即3
B. 变量a的地址值
C. 变量P的地址值
D. 无意义
解析:此题考查的是指针变量的定义与赋初值。语句*p=&a是定义指针并且给指针赋初值,指向a,所以指针的值就是变量a的地址,*p的值就是a的值。
5.下列运算符中不能在C++中重载的是( )。(A)
A. ?:
B. +
C. –
D. <=
解析:此题考查的是运算符的有关概念。运算符重载是针对C++原有运算符进行的,不能通过重载创造新的运算符;除了.、.*、->*、::、?:这五个运算符之外,其他运算符都可以重载。
6.有如下类定义:
class AA{
int a;
Public:
AA(int n=0):a(n){}
};
class BB:public AA{
public:
BB(int n) ______________
};
其中横线处的缺失部分是( )。
B
解析:本题考查公用继承对基类成员的访问属性。公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有,本题中若要给派生类继承下来基类的私有成员赋值,那么只能调用基类的成员函数来对它赋值,成员变量默认的访问权限为私有,即a为私有变量。所以本题答案为B。
7.关于模板,下列说法不正确的是( )。(B )
A. 用类模板定义一个对象时,不能省略实参
B. 类模板只能有虚拟类型参数
C. 类模板本身在编译中不会生成任何代码
D. 类模板的成员函数都是模板函数
解析:类模板不是一个实实在在的类,本身在编译中不会生成任何代码;用类模板定义一个对象时,不能省略实参;类模板的成员函数都是模板函数。C++中可以为类模板的参数设置默认值,所以选项B)错误。
8.有如下程序:
#include
using namespace std;
class test{
private:
int a;
public:
test(){tout<<\\(D)
A. 3
B. constructor
destructor
C. copy constructor
destructor
D. 3
destructor
解析:本题考查默认构造函数和带参数的构造函数以及析构函数,本题中定义了一个对象A(3),对象带着参数,所以执行带参数的构造函数,输出3,然后执行析构函数,输出destructor。所以本题答案为D。
9.若要对:Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。(B)
A. Data+(Data);
B. Data operator+(Data);
C. Data+operator(Data);
D. operator+(Data,Data);
解析:根据重载加法运算符的格式,只有B选项正确。
10.在C++中,编译系统自动为一个类生成默认构造函数的条件是(C)
A. 该类没有定义任何有参构造函数
B. 该类没有定义任何无参构造函数
C. 该类没有定义任何构造函数
D. 该类没有定义任何成员函数
解析:本题考查默认构造函数,如果用户定义的类中没有显式的定义任何构造函数,编译器就会自动为该类型生成默认构造函数,称为合成的构造函数。C选项正确。
11.以下程序中调用cin函数给变量a输入数值的方法是错误的,其错误原因是( )。
#include
void main()
{int*p,*q,a,b;
p=&a;
cout<<\\(B)
A. *p表示的是指针变量p的地址
B. p表示的是变量a的地址,而不是变量a的值
C. *p表示的是指针变量P的值
<本文档预览:3600字符,共15977字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载