国家二级C++机试(类和对象)模拟试卷16
选择题
1.有如下程序
#inc1ude<iostream>
#inc1ude<iomanip>
using namespace std;
c1ass MyClass{
public:
MyClass(){cout<<’A’;)
MyClass(charc){cout<<c;}
~MyClass(){cout<<’B’;}
};
int main(){
MyClass p1,*p2;
p2 newMyClass(’X’);
delete p2;
retum 0;
}
执行这个程序屏幕上将显示输出( )。(D)
A. ABX
B. ABXB
C. AXB
D. AXBB
解析:此题考查的是构造函数和析构函数。构造函数在对象被创建的时候由系统自动调用,而析构函数在对象的生存期即将结束的时候由系统自动调用。此题中,主程序在创建MayClass类的对象p1时,调用MayClass类的默认构造函数,输出字母A:然后在创建.p2对象时,调用带字母参数的构造函数,输出字母X;语句delete p2;调用析构函数,输出字母B:在主函数退出时,调用析构函数清除对象p1,输出字母B。
2.有如下程序:
#inc1ude<iostream>
using namespace std;
c1ass test{
private:
int a;
public:
test0 {cout+\\(D)
A. 3
B. constructor destructor
C. copy Destructor
D. 3 destructor
解析:此题考查的是构造函数和析构函数。一个类可以有多个构造函数,但只能有一个析构函数。每一个对象在被创建时,都会隐含调用众多构造函数中的一个,而在销毁时又会隐含调用唯一的析构函数。此题中,主函数创建对象A是会隐含调用test(int a)这个构造函数,输出3;接着主函数结束,对象A销毁又隐含调用~test()析构函数输出destructor。
3.对于一个类定义,下列叙述中错误的是( )。(B)
A. 如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数
B. 如果没有定义缺省的构造函数,编译器将一定生成一个缺省的构造函数
C. 如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数
D. 如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数
解析:此题考查的是构造函数。如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的公有缺省构造函数。但只要定义了一个任意的构造函数,就不会生成缺省构造函数了。
4.有如下程序:
#inc1ude<iostream>
using namespace std;
c1ass Part{
public:
Part(int x=0):val(x){cout<<val;}
~Part0 {cout<<val;)
private:
int val,
};
c1ass 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。
5.有如下程序:
#inc1ude<iostream>
using namespace std;
c1ass Base{
public:
Base(int x=0){cout<<x;}
};
c1ass Derived:public Base{
public:
Derived(int x=0){cout<<x,}
private:
Base val;
};
int main(){
Derived d(1);
retum 0;
}
程序的输出结果是( )。(D)
A. 0
B. 1
C. 01
D. 001
解析:此题考查的是类的构造。建立类的对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右)—>执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序.>执行自身的构造函数。本题中,首先会构造基类Base,调用Base类的构造函数,输出0;然后还定义了一个Base类的对象,再次调用Base类的默认构造函数输出0;最后构造自身,因主函数中传入了构造参数1,所以输出1。故最后输出结果是:001。
6.有如下类定义:
c1ass MyClass{
Int value,
public;
MyClass(int n): value (n){}
int gerValue()const{ return value;}
};
则类MyClass的构造函数的个数是( )。(A)
A. 1个
B. 2个
C. 3个
D. 4个
解析:此题考查的是构造函数的概念。构造函数的名字必须与类名相同;构造函数不指定返回值类型;构造函数可以重载:在创建对象时,系统会自动调用构造函数。
7.在C++中,编译系统自动为一个类生成缺省构造函数的条件是( )。(C)
A. 该类没有定
本文档预览:3600字符,共10912字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载