国家二级C++机试(类和对象)模拟试卷19
选择题
1.有如下程序:
#include<iostream>
using narnespace std;
class test{
private:
int a;
public:
test0{cout+’’constructor’’+endl;}
test(int a){cout+a+endl;}
test(const test&test)
{
a=test.a;
cout+’’copy constructor’’+en.d1;
}
test(){ cout+’’destructor\\(D)
A. 3
B. constructor
destructor
C. copy constructor
destructor
D. 3
destructor
解析:此题考查的是构造函数和析构函数。一个类可以有多个构造函数,但只能有一个析构函数。每一个对象在被创建时,都会隐含调用众多构造函数中的一个,而在销毁时又会隐含调用唯一的析构函数。此题中,主函数创建对象A是会隐含调用。test(int a)这个构造函数,输出3;接着主函数结束,对象A销毁又隐含调用~test()析构函数输出destructor。
2.对于一个类定义,下列叙述中错误的是( )。(B)
A. 如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数
B. 如果没有定义缺省的构造函数,编译器将一定生成一个缺省的构造函数
C. 如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数
D. 如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数
解析:此题考查的是构造函数。如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的公有缺省构造函数。但只要定义了一个任意的构造函数,就不会生成缺省构造函数了。
3.有如下程序:
#include<iostream>
using namespace std;
class Part{
public:
Part(int x=0):val(x){cout<<val;}
~Part(){cout<<val;}
private:
int val;
};
class Whole{
public:
Whole(int x,int y,int z=0):p2(x),p1(y),val(z){cout<<val;}
~Whole(){cout<<val;}
private:
Part p1,p2;
int val;
};
int main(){
Whole obj(1,2,3);
return 0;
}
程序的输出结果是( )。(B)
A. 123321
B. 213312
C. 213
D. 123123
解析:此题考查的是类的构造与析构。建立类的对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右)接着执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序,最后执行自身的构造函数。析构顺序与之相反。本题中,Whole类中有两个Part类的成员p1和p2,根据它们定义的顺序,先构造p1再构造p2。所以,首先被构造的是p1(y),输出2;第二个被构造的是p2(x),输出1;最后调用析构函数,输出val的值3;析构函数调用顺序与构造函数相反。故最后输出213312。
4.有如下程序:
#include<iostream>
using namespace std;
class Base {
public:
Base(int x=0){cout<<x;}
};
class Derived:public Base {
public:
Derived(int x=0){cout<<x;}
private:
Base val;
};
int main(){
Derived d(1);
return 0;
}
程序的输出结果是( )。(D)
A. 0
B. 1
C. 01
D. 001
解析:此题考查的是类的构造。建立类的对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右)->执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序->执行自身的构造函数。本题中,首先会构造基类Base,调用Base类的构造函数,输出0:然后还定义了一个Base类的对象,再次调用Base类的默认构造函数输出0;最后构造自身,因主函数中传入了构造参数1,所以输出1。故最后输出结果是:001。
5.有如下类定义:
class MyClass{
Int value;
public;
MyClass(int n):value(n){}
int gerValueoconst{return value;}
};
则类MyClass的构造函数的个数是( )。(A)
A. 1个
B. 2个
C. 3个
D. 4个
解析:此题考查的是构造函数的概念。构造函数的名字必须与类名相同;构造函数不指定返回值类型;构造函数可以重载;在创建对象时,系统会自动调用构造函数。
6.在C++中,编译系统自动为一个类生成缺省构造函数的条件是( )。(C)
A. 该类没有定义任何有参构造函数
B. 该类没有定义任何无参构造函数
C. 该类没有定义任何构造函数
D. 该类没有定义任何成员函数
解析:如果一个类中定义了一个缺省的构造函数,则使用该函数。如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的共有缺省构造函数。
7.有如下程序:
#include<iostream>
using namespace std;
class Sample{
public:
Sample(){}
~Sample(){cout<<’*’;)
};
int main(){
Sample temp[2],*pTemp[2];
return 0;
}
本文档预览:3600字符,共11284字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载