C++综合练习 答案.docx
《C++综合练习 答案.docx》由会员分享,可在线阅读,更多相关《C++综合练习 答案.docx(71页珍藏版)》请在冰豆网上搜索。
C++综合练习答案
第三章类和对象
一、选择题
1.在一个类的定义中,包含有(?
C?
)成员的定义。
?
?
?
?
?
?
?
A.数据?
?
?
?
?
B.函数?
?
?
?
?
C.数据和函数?
?
?
?
?
D.数据或函数
2.在类作用域中能够通过直接使用该类的(?
?
D)成员名进行访问。
?
?
?
?
?
?
?
A.私有?
?
?
?
?
B.公用?
?
?
?
?
C.保护?
?
?
?
?
D.任何
3.假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为(?
?
D)。
?
?
?
?
?
?
?
A.x(a)?
?
?
?
?
B.x[a]?
?
?
?
?
C.x->a?
?
?
?
?
D.x.a
4.假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为(?
B?
)。
?
?
?
?
?
?
?
A.x.a?
?
?
?
?
B.x.a()?
?
?
?
?
C.x->a?
?
?
?
?
D.x->a()
5.假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为(C?
?
)。
?
?
?
?
?
?
?
A.px(a)?
?
?
?
?
B.px[a]?
?
?
?
?
C.px->a?
?
?
?
?
D.px.a
6.假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为(?
?
D)。
?
?
?
?
?
?
?
A.x.a?
?
?
?
?
B.x.a()?
?
?
?
?
C.x->GetValue()?
?
?
?
?
D.x.GetValue()
7.假定AA为一个类,inta()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为(A?
?
)。
?
?
?
?
?
?
?
A.intAA:
:
a()?
?
?
?
?
B.intAA:
a()
?
?
?
?
?
?
?
C.AA:
:
a()?
?
?
?
?
?
?
?
?
D.AA:
:
inta()
8.假定AA为一个类,a为该类公有的数据成员,若要在该类的一个成员函数中访问它,则书写格式为(A?
)。
?
?
?
?
?
?
?
A.a?
?
?
?
?
B.AA:
:
a?
?
?
?
?
C.a()?
?
?
?
?
D.AA:
:
a()
9.若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字(?
?
B)放在函数原型或函数头的前面。
?
?
?
?
?
?
?
A.in?
?
?
?
?
B.inline?
?
?
?
?
C.inLine?
?
?
?
?
D.InLiner
10.在多文件结构的程序中,通常把类的定义单独存放于(?
D?
)中。
?
?
?
?
?
?
?
A.主文件?
?
?
?
?
B.实现文件?
?
?
?
?
C.库文件?
?
?
?
?
D.头文件
11.在多文件结构的程序中,通常把类中所有非内联函数的定义单独存放于(?
?
B)中。
?
?
?
?
?
?
?
A.主文件?
?
?
?
?
B.实现文件?
?
?
?
?
C.库文件?
?
?
?
?
D.头文件
12.在多文件结构的程序中,通常把含有main()函数的文件称为(A?
?
)。
?
?
?
?
?
?
?
A.主文件?
?
?
?
?
B.实现文件?
?
?
?
?
C.程序文件?
?
?
?
?
D.头文件
13.在C++程序中使用的cin标识符是系统类库中定义的(?
?
A)类中的一个对象。
?
?
?
?
?
?
?
A.istream?
?
?
?
?
B.ostream?
?
?
?
?
C.iostream?
?
?
?
?
D.fstream
14.在C++程序中使用的cout标识符是系统类库中定义的(?
?
B)类中的一个对象。
?
?
?
?
?
?
?
A.istream?
?
?
?
?
B.ostream?
?
?
?
?
C.iostream?
?
?
?
?
D.fstream
15.假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数的类型为(?
?
D)。
?
?
?
?
?
?
?
A.int?
?
?
?
?
B.char?
?
?
?
?
C.AA?
?
?
?
?
D.AA*
16.假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数为(?
?
C)。
?
?
?
?
?
?
?
A.abc?
?
?
?
?
B.*this?
?
?
?
?
C.this?
?
?
?
?
D.this&
17.假定AA是一个类,“AA&abc();”是该类中一个成员函数的原型,若该函数存在对*this赋值的语句,当用x.abc()调用该成员函数后,x的值(A?
?
)。
?
?
?
?
?
?
?
A.已经被改变?
?
?
?
?
?
B.可能被改变
?
?
?
?
?
?
?
C.不变?
?
?
?
?
?
?
?
?
?
?
?
D.不受函数调用的影响
?
?
?
18.假定AA是一个类,“AA*abc()const;”是该类中一个成员函数的原型,若该函数返回this值,当用x.abc()调用该成员函数后,x的值(?
?
C)。
?
?
?
?
?
?
?
A.已经被改变?
?
?
?
?
?
B.可能被改变
?
?
?
?
?
?
?
C.不变?
?
?
?
?
?
?
?
?
?
?
?
D.受到函数调用的影响
?
?
?
19.类中定义的成员默认为(?
B?
)访问属性。
?
?
?
?
?
?
?
A.public?
?
?
?
?
B.private?
?
?
?
?
C.protected?
?
?
?
?
D.friend
?
?
?
20.结构中定义的成员默认为(?
?
A)访问属性。
?
?
?
?
?
?
?
A.public?
?
?
?
?
B.private?
?
?
?
?
C.protected?
?
?
?
?
D.friend
?
?
?
21.当类中一个字符指针成员指向具有n个字节的存储空间时,它所能存储字符串的最大长度为(?
?
C)。
?
?
?
?
?
?
?
A.n?
?
?
?
?
B.n+1?
?
?
?
?
C.n-1?
?
?
?
?
D.n-2
?
?
?
22.对于一个类的构造函数,其函数名与类名(?
?
?
A)。
?
?
?
?
?
?
?
A.完全相同?
?
?
?
?
B.基本相同?
?
?
?
?
C.不相同?
?
?
?
?
D.无关系
?
?
?
23.对于一个类的析构函数,其函数名与类名(?
?
?
C)。
?
?
?
?
?
?
?
A.完全相同?
?
?
?
?
B.完全不同?
?
?
?
?
C.只相差一个字符?
?
?
?
?
D.无关系
?
?
?
24.类的构造函数是在定义该类的一个(?
?
?
C)时被自动调用执行的。
?
?
?
?
?
?
?
A.成员函数?
?
?
?
?
B.数据成员?
?
?
?
?
C.对象?
?
?
?
?
D.友元函数
?
?
?
25.类的析构函数是一个对象被(?
?
?
B)时自动调用的。
?
?
?
?
?
?
?
A.建立?
?
?
?
?
B.撤消?
?
?
?
?
C.赋值?
?
?
?
?
?
?
D.引用
?
?
?
26.一个类的构造函数通常被定义为该类的(?
?
?
A)成员。
?
?
?
?
?
?
?
A.公用?
?
?
?
?
B.保护?
?
?
?
?
C.私有?
?
?
?
?
D.友元
?
?
?
27.一个类的析构函数通常被定义为该类的(?
?
?
C)成员。
?
?
?
?
?
?
?
A.私有?
?
?
?
?
B.保护?
?
?
?
?
C.公用?
?
?
?
?
D.友元
?
?
?
28.假定AB为一个类,则执行“ABx;”语句时将自动调用该类的(?
?
?
B)。
?
?
?
?
?
?
?
A.带参构造函数?
B.无参构造函数?
?
C.拷贝构造函数?
?
D.赋值重载函数
?
?
?
29.假定AB为一个类,则执行“ABx(a,5);”语句时将自动调用该类的(?
?
A?
)。
?
?
?
?
?
?
?
A.带参构造函数?
B.无参构造函数?
?
C.拷贝构造函数?
?
D.赋值重载函数
?
?
?
30.假定AB为一个类,则执行“AB*s=newAB(a,5);”语句时得到的一个动态对象为____D___。
?
?
?
?
?
?
?
A.s?
?
?
?
?
?
?
B.s->a?
?
?
?
?
?
?
C.s.a?
?
?
?
?
?
?
D.*s
?
?
?
31.假定AB为一个类,则执行“ABr1=r2;”语句时将自动调用该类的(?
?
D?
)。
?
?
?
?
?
?
?
A.无参构造函数?
B.带参构造函数?
?
C.赋值重载函数?
?
D.拷贝构造函数
?
?
?
32.若需要使类中的一个指针成员指向一块动态存储空间,则通常在(?
B?
?
)函数中完成。
?
?
?
?
?
?
?
A.析构?
?
?
?
?
B.构造?
?
?
?
?
C.任一成员?
?
?
?
?
D.友元
?
?
?
33.当类中的一个整型指针成员指向一块具有n*sizeof(int)大小的存储空间时,它最多能够存储(?
?
?
A)个整数。
?
?
?
?
?
?
?
A.n?
?
?
?
?
?
?
?
B.n+1?
?
?
?
?
?
C.n-1?
?
?
?
?
D.1
?
?
?
34.假定一个类的构造函数为“A(intaa,intbb){a=aa;b=aa*bb;}”,则执行“A?
x(4,5);”语句后,x.a和x.b的值分别为(?
?
?
C)。
?
?
?
?
?
?
?
A.4和5?
?
?
?
B.5和4?
?
?
?
?
C.4和20?
?
?
?
?
D.20和5
?
?
?
35.假定一个类的构造函数为“A(intaa=1,intbb=0){a=aa;b=bb;}”,则执行“Ax(4);”语句后,x.a和x.b的值分别为(?
D?
?
)。
?
?
?
?
?
?
?
A.1和0?
?
?
?
B.1和4?
?
?
?
?
C.4和1?
?
?
?
?
?
D.4和0
?
?
?
36.假定AB为一个类,则(?
?
?
B)为该类的拷贝构造函数的原型说明。
?
?
?
?
?
?
?
A.AB(ABx);?
?
?
B.AB(AB&x);?
?
?
?
C.voidAB(AB&x);?
?
?
?
D.AB(intx);
?
?
?
37.假定一个类的构造函数为“B(intax,intbx):
a(ax),b(bx){}”,执行“Bx(1,2),y(3,4);x=y;”语句序列后x.a的值为(?
?
C?
)。
?
?
?
?
?
?
?
A.1?
?
?
?
?
B.2?
?
?
?
?
C.3?
?
?
?
?
D.4
?
?
?
38.假定一个类AB只含有一个整型数据成员a,当用户不定义任何构造函数时,系统为该类定义的无参构造函数为(?
?
?
D)。
?
?
?
?
?
?
?
A.AB(){a=0;}?
?
?
?
?
?
?
?
?
?
?
B.AB(intaa=0):
a(aa){}
?
?
?
?
?
?
?
C.AB(intaa):
a(aa){}?
?
D.AB(){}
?
?
?
39.假定一个类AB只含有一个整型数据成员a,用户为该类定义的带参构造函数可以为(?
?
?
C)。
?
?
?
?
?
?
?
A.AB(){}?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.AB():
a(0){}
?
?
?
?
?
?
?
C.AB(intaa=0){a=aa;}?
?
?
?
?
D.AB(intaa){}
?
?
?
40.对于任一个类,用户所能定义的构造函数的个数至多为(?
?
D?
)。
?
?
?
?
?
?
?
A.0?
?
?
?
?
B.1?
?
?
?
?
C.2?
?
?
?
?
D.任意个
?
?
?
41.对于任一个类,用户所能定义的析构函数的个数至多为(?
?
?
B)。
?
?
?
?
?
?
?
A.0?
?
?
?
?
B.1?
?
?
?
?
C.2?
?
?
?
?
D.任意个
?
?
?
42.假定AB为一个类,则执行“AB*px=newAB[n];”语句时将(?
?
A?
)。
?
?
?
?
?
?
?
A.动态分配一个数组?
?
?
?
?
B.动态分配一个对象
?
?
?
?
?
?
?
C.静态分配一个数组?
?
?
?
?
D.静态分配一个对象
?
?
?
43.设px是指向一个类对象的指针变量,则执行“deletepx;”语句时,将自动调用该类的(?
?
C?
)。
?
?
?
?
?
?
?
A.无参构造函数?
?
?
B.带参构造函数?
?
?
C.析构函数?
?
?
D.拷贝构造函数
?
?
?
44.当一个类对象离开它的作用域时,系统自动调用该类的(?
?
?
D)。
?
?
?
?
?
?
?
A.无参构造函数?
?
?
B.带参构造函数?
?
?
C.拷贝构造函数?
D.析构函数
?
?
?
45.假定一个类对象数组为A[n],当离开它定义的作用域时,系统自动调用该类析构函数的次数为(?
C)。
?
?
?
?
?
?
?
A.0?
?
?
?
?
B.1?
?
?
?
?
C.n?
?
?
?
?
D.n-1
?
?
?
46.假定AB为一个类,则执行“ABa[10];”语句时调用该类无参构造函数的次数为(?
?
D?
)。
?
?
?
?
?
?
?
A.0?
?
?
?
?
B.1?
?
?
?
?
C.9?
?
?
?
?
D.10
?
?
?
47.假定AB为一个类,则执行“AB*px=newAB[n];”语句时调用该类无参构造函数的次数为(?
?
?
A)。
?
?
?
?
?
?
?
A.n?
?
?
?
?
B.n-1?
?
?
?
?
C.1?
?
?
?
?
D.0
?
?
?
48.假定AB为一个类,则执行“ABa,b(3),*p;”语句时共调用该类构造函数的次数为(?
?
A?
)。
?
?
?
?
?
?
?
A.2?
?
?
?
?
B.3?
?
?
?
?
C.4?
?
?
?
?
D.5
?
?
?
49.假定AB为一个类,则执行“ABa
(2),b[3],*p[4];”语句时共调用该类构造函数的次数为(B?
?
?
)。
?
?
?
?
?
?
?
A.3?
?
?
?
?
B.4?
?
?
?
?
C.5?
?
?
?
?
D.9
?
?
?
50.假定AB为一个类,则执行“ABa,b
(2),c[3],*p=&a;”语句时共调用该类无参构造函数的次数为(?
D)。
?
?
?
?
?
?
?
A.5?
?
?
?
?
B.6?
?
?
?
?
C.3?
?
?
?
?
D.4
?
?
?
51.假定AB为一个类,则执行“AB*p=newAB(1,2);”语句时共调用该类构造函数的次数为(?
?
?
B)。
?
?
?
?
?
?
?
A.0?
?
?
?
?
B.1?
?
?
?
?
C.2?
?
?
?
?
D.3
?
?
?
52.假定AB为一个类,px为指向该类的一个含有n个对象的动态数组的指针,则执行“delete[]px;”语句时共调用该类析构函数的次数为(?
?
C?
)。
?
?
?
?
?
?
?
A.0?
?
?
?
?
B.1?
?
?
?
?
C.n?
?
?
?
?
D.n+1
?
?
?
53.对类对象成员的初始化是通过构造函数中给出的(?
?
D?
)实现的。
?
?
?
?
?
?
?
A.函数体?
?
?
?
?
B.初始化表?
?
?
?
?
C.参数表?
?
?
?
?
D.初始化表或函数体
?
?
?
54.对类中常量成员的初始化是通过构造函数中给出的(?
?
C?
)实现的。
?
?
?
?
?
?
?
A.函数体?
?
?
?
?
B.参数表?
?
?
?
?
?
?
C.初始化表?
?
?
?
?
D.初始化表或函数体
?
?
?
55.对类中引用成员的初始化是通过构造函数中给出的(?
?
?
C)实现的。
?
?
?
?
?
?
?
A.函数体?
?
?
?
?
B.参数表?
?
?
?
?
?
?
C.初始化表?
?
?
?
?
D.初始化表或函数体
?
?
?
56.一个类的静态数据成员所表示属性(?
C?
)。
?
?
?
?
?
?
?
A.是类的或对象的属性?
?
?
?
?
?
?
?
?
B.只是对象的属性
?
?
?
?
?
?
?
C.只是类的属性?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.类和友元的属性
57.类的静态成员的访问控制(?
D?
)。
?
?
?
?
?
?
?
A.只允许被定义为private
?
?
?
?
?
?
?
B.只允许被定义为private或protected?
?
?
?
?
?
?
?
C.只允许被定义为public?
?
?
?
?
?
?
?
?
D.可允许被定义为private、protected或public
?
?
?
58.静态成员函数对类的数据成员访问(?
?
B?
)。
?
?
?
?
?
?
?
A.是不允许的?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.只允许是静态数据成员
?
?
?
?
?
?
?
C.只允许是非静态数据成员?
?
?
?
?
D.可允许是静态数据成员或非静态数据成员
?
?
?
59.被非静态成员函数访问的类的数据成员(?
A)。
?
?
?
?
?
?
?
A.可以是非静态数据成员或静态数据成员?
?
?
B.不可能是类的静态数据成员
?
?
?
?
?
?
?
C.只能是类的非静态数据成员?
?
?
?
?
?
?
?
?
?
?
?
?
D.只能是类的静态数据成员
?
?
?
60.静态数据成员的初始化是在(?
?
?
D)中进行的。
?
?
?
?
?
?
?
A.构造函数?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.任何成员函数
?
?
?
?
?
?
?
C.所属类?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
D.全局区
?
?
?
61.当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的(?
?
D?
)。
?
?
?
?
?
?
?
A.只能是公有成员?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
B.只能是保护成员
?
?
?
?
?
?
?
C.只能是除私有成员之外的任何成员?
?
?
?
?
D.具有任何权限的成员
?
?
?
62.引入友元的主要目的是为了(?
?
C?
)。
?
?
?
?
?
?
?
A.增强数据安全性?
?
?
?
?
?
?
?
?
?
?
?
B.提高程序的可靠性
?
?
?
?
?
?
?
C.提高程序的效率和灵活性?
?
?
?
D.保证类的封装性
?
?
?
63.一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明(?
?
A?
)。
?
?
?
?
?
?
?
A.需加上类域的限定?
?
?
?
?
?
?
?
?
?
?
B.不需加上类域的限定
?
?
?
?
?
?
?
C.类域的限定可加可不加?
?
?
?
?
?
?
D.不需要任何限定
?
?
?
64.一个类的友元不是该类的成员,与该类的关系密切,所以它(?
?
D?
)。
?
?
?
?
?
?
?
A.有this指针,有默认操作的对象?
?
?
?
?
?
?
?
?
B.没有this指针,可以有默认操作的对象
?
?
?
?
?
?
?
C.有this指针,不能执行默认操作
?
?
?
?
?
?
?
D.没有this指针,也就没有默认操作的对象
二、程序填充题
1.已知一个类的定义如下:
#include
classAA{
inta[10];
intn;
public:
voidSetA(intaa[],intnn);//用数组aa初始化数据成员a,用nn初始化数据成员n
intMaxA();//从数组a中前n个元素中查找最大值
voidSortA();//采用选择排序的方法对数组a中前n个元素,进行从小到大排序
voidInsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序
voidPrintA();//依次输出数组a中的前n个元素
};
该类中MaxA()函数的实现如下,请在标号位置补充适当的内容。
int____
(1)__AA:
:
Max()___
{
intx=a[0];
for(inti=1;iif(a[i]>x)___
(2)x=a[i]___;
___(3)_returnx__;
}
2.已知一个类的定义如下:
#include
classAA{
inta[10];
intn;
public:
voidSetA(intaa[],intnn);//用数组aa初始化数据成员a,用nn初始化数据成员n
intMaxA();//从数组a中前n个元素中查找最大值
voidSortA();//采用选择排序的方法对数组a中前n个元素,进行从小到大排序
voidInsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序
voidPrintA();//依次输出数组a中的前n个元素
};
voidAA:
:
SortA()
{
inti,j;
for(i=0;___
(1)iintx=a[i],k=i;
for(j=i+1;jif(a[j](2)_{x=a[j];k=j}__
a[k]=a[i];
___(3)a[i]=x___;
}
}
3.已知一个类的定义如下:
#include
classAA{
inta[10];
intn;
public:
voidSetA(intaa[],intnn);//用数组aa初始化数据成员a,用nn初始化数据成员n
intMaxA();//从数组a中前n个元素中查找最大值
voidSortA();//采用选择排序的方法对数组a中前n个元素,进行从小到大排序
voidInsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序
voidPrintA();//依次输出数组a中的前n个元素
};
void___
(1)__AA:
:
Insert()_
{
inti,j;
for(i=1;iintx=a[i];
for(j=i-1;j>=0;j--)
if(x(2)_a[j+1]=a[j]__;
else___(3)break___;
a[j+1]=x;
}
}
4.已知一个类的定义如下:
#include
classAA{
inta[10];
intn;
public:
voidSetA(intaa[],intnn);//用数组aa初始化数据成员a,用nn初始化数据成员n
intMaxA();//从数组a中前n个元素中查找最大值
voidSortA();//采用选择排序的方法对数组a中前n个元素,进行从小到大排序
voidInsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序
voidPrintA();//依次输出数组a中的前n个元素,最后输出一个换行
};
使用该类的主函数如下:
voidmain()
{
inta[10]={23,78,46,55,62,76,90,25,38,42};
AAx;
___
(1)__x.SetA(a,6)_;
intm=___
(2)_x.MaxA()__;
___(3)_x.PrintA()__;
cout<}
该程序运行结果为:
237846556276
78
5.已知一个类的定义如下:
#include
classAA{
inta[10];
intn;
public:
voidSetA(intaa[],intnn);//用数组aa初始化数据成员a,用nn初始化数据成员n
intMaxA();//从数组a中前n个元素中查找最大值
voidSortA();//采用选择排序的方法对数组a中前n个元素,进行从小到大排序
voidPrintA();//依次输出数组a中的前n个元素,最后输出一个换行
};
使用该类的主函数如下:
voidmain()
{
inta[10]={23,78,46,55,62,76,90,25,38,42};
___
(1)_AAx__;
x.SetA(a,8);
int___
(2)_m=x.MaxA()__;
___(3)_x.Sort()__;
x.PrintA();
cout<}
该程序运行结果为:
232546