复习题答案Word格式.docx
- 文档编号:21999616
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:19
- 大小:24.29KB
复习题答案Word格式.docx
《复习题答案Word格式.docx》由会员分享,可在线阅读,更多相关《复习题答案Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
C.加强类的封装性
B.提高程序的运行效率
D.实现数据的隐藏
10.在C++中继承方式有几中(C
A.1
B.2
C.3
D.4
11.派生类的对象对它的基类成员中(A)是可以访问的。
A.公有继承的公有成员;
C.公有继承的保护成员;
B.公有继承的私有成员;
D.私有继承的公有成员。
12.类中定义的成员默认为(B)访问属性。
A.public
B.private
C.protectedD.friend
13.下列存储类标识符中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速
度,选用(A
)合适。
A.内联函数;
B.重载函数;
C.递归调用;
D.嵌套调用。
14.C++对C语言作了很多改进,下列描述中(D)使得C语言发生了质变,从面向过程变成
了面向对象。
A.增加了一些新的运算符;
C.规定函数说明必须用原型;
B.允许函数重载,并允许设置缺省参数;
D.引进了类和对象的概念;
15.按照标识符的要求,(A)符号不能组成标识符。
A.连接符
B.下划线
C.大小写字母
D.数字字符
16.下列变量名中,(A
ACHINA
)是合法的。
Bbyte-size
Cdouble
DA+a
17.下列各种函数中,(C
)不是类的成员函数。
A构造函数B析构函数
C友元函数
D拷贝构造函数
18.下列(A
)是正确的语句。
A;
Ba=17
Cx+y
Dcout<
<
"
\n"
2
19.不能作为函数重载判断的依据的是(B)
A.返回类型B.const
C.参数个数
D.参数类型
20.通常,拷贝构造函数的参数是(C)
A.某个对象名
B.某个对象的成员名
D.某个对象的指针名
C.某个对象的引用名
21.下面对静态数据成员的描述中,正确的是(C)
A类的不同对象有不同的静态数据成员值
B类的每个对象都有自己的静态数据成员
C静态数据成员是类的所有对象共享的数据
D静态数据成员不能通过类的对象调用
22.假定AB为一个类,则执行ABx;
语句时将自动调用该类的(B)
A.有参构造函数
B.无参构造函数C.拷贝构造函数D.赋值构造函数
23.C++程序从上机到得到结果的几个操作步骤依次是(B
24.假定一条定义语句为“inta[10],x,*p=a;
”,若要把数组a中下标为3的元素值赋给
x,则不正确的语句为(D)。
A.x=p[3];
B.x=*(a+3);
C.x=a[3];
D.x=*p+3;
25.关于封装,下列说法中不正确的是(D)。
A.通过封装,对象的全部属性和操作结合在一起,形成一个整体
B.通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)
C.通过封装,每个对象都成为相对独立的实体
D.通过封装,对象的属性都是不可见的
26.预处理命令在程序中都是以(B
)符号开头的。
A.*
B.#
C.&
D.@
27.存储以下数据,占用存储字节最少的是(B
A.0
B.‘0’
C.“0”
D.0.0
28.程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用(D
)符号作为分隔
3
A.编译、编辑、连接、运行
C.编译、运行、编辑、连接
B.编辑、编译、连接、运行
D.编辑、运行、编辑、连接
符。
A.空格或逗号
B.逗号或回车
C.逗号或分号
D.空格或回车
D.int*p=m;
29.假定变量m定义为“intm=7;
”,则定义变量p的正确语句为(B)。
A.intp=&
m;
B.int*p=&
C.int&
p=*m;
30.下面的哪个保留字不能作为函数的返回类型?
(C)
A.void
B.int
C.new
31.采用重载函数的目的是(D
A.实现共享
B.减少空间
C.提高速度
D.使用方便,提高可读性
32.假定AB为一个类,则(C
A.AB(ABx);
)为该类的拷贝构造函数的原型说明。
B.AB(intx);
C.AB(AB&
x);
D.voidAB(AB&
33、C++对C语言作了很多改进,下列描述中(D)使得C语言发生了质变,从面向过程变
成了面向对象。
34、所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这
实体也就是(A)。
A.类
B.对象
C.函数体
D.数据块
35、关于new运算符的下列描述中,(C)是错误的。
A、它可以用来动态创建对象和对象数组;
B、使用它创建的对象或对象数组可以使用运算符delete删除;
C、使用它创建对象时要调用构造函数;
D、使用它创建对象数组时必须指定初始值;
36、(D)不是构造函数的特征。
A、构造函数的函数名与类名相同;
B、构造函数可以重载;
C、构造函数可以设置缺省参数;
D、构造函数必须指定类型说明。
37、假定一个类的构造函数为B(intx,inty){a=x--;
b=a*y--;
},则执行Bx(3,5);
语句
后,x.a和x.b的值分别为(C)
A、3和5
B、5和3
C、3和15
D、20和5
4
A、增加了一些新的运算符;
B、允许函数重载,并允许设置缺省参数;
C、规定函数说明必须用原型;
D、引进了类和对象的概念;
38、关于成员函数特征的下列描述中,(A)是错误的。
A、成员函数一定是内联函数;
B、成员函数可以重载;
C、成员函数可以设置缺省参数值;
D、成员函数可以是静态的;
39、在公有继承的情况下,基类成员在派生类中的访问权限(B)。
A、受限制
B、保持不变
C、受保护
D、不受保护
40、友元的作用是(A)。
A、提高程序的运用效率;
B、加强类的封装性;
C、实现数据的隐藏性;
D、增加成员函数的种类;
41、在C++中,关于下列设置缺省参数值的描述中,(B)是正确的。
A、不允许设置缺省参数值;
B、在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;
C、只能在函数的定义性声明中指定参数的缺省值;
D、设置缺省参数值时,必须全部都设置;
42、关于delete运算符的下列描述中,(C)是错误的。
A、它必须用于new返回的指针;
B、使用它删除对象时要调用析构函数;
C、对一个指针可以使用多次该运算符;
D、指针名前只有一对方括号符号,不管所删除数组的维数。
43、constint*p说明不能修改(C)。
A、p指针;
B、p指针指向的变量;
C、p指针指向的数据类型;
D、上述A、B、C三者;
44、当需要打开A盘上的以xxk.dat文件用于输入时,则定义文件流对象的语句为(B)。
A、fstreamfin(“A:
xxk.dat”,1)B、ifstreamfin(“A:
xxk.dat”,ios:
:
nocreate)
C、ofstreamfin(“A:
xxk.dat”)D、ifstreamfin(“A:
app)
45、派生类的对象对它的基类成员中(A)是可以访问的。
A、公有继承的公有成员;
B、公有继承的私有成员;
C、公有继承的保护成员;
D、私有继承的公有成员;
46、在inta=3;
*p=&
a;
中,*p的值是(D)。
5
A、变量a的地址值
B、无意义
C、变量p的地址值
D、3
47.下述静态数据成员的特征中,(D)是错误的。
A.说明静态数据成员时前边要加修饰符static;
B.静态数据成员要在类体外进行初始化;
C.引用静态数据成员时,要在静态数据成员名前加<
类名>
和作用域运算符;
D.静态数据成员不是所有对象所共用的。
48.(A)是析构函数的特征。
A.一个类中只能定义一个析构函数;
C.析构函数的定义只能在类体内;
B.析构函数与类名没有关系;
D.析构函数可以有各个或多个参数。
;
49.已知:
p是一个指向类A数据成员m的指针,A1是类A的一个对象。
如果要给m赋值为
5,(C)是正确的。
A.A1.p=5;
C.A.*p=5;
B.A1->
p=5;
D.*A1.p=5;
50.派生类的构造函数的成员初始化列中,不能包含(C)。
A.基类的构造函数;
B.派生类中子对象的初始化;
C.基类的子对象初始化;
D.派生类中一般数据成员的初始化
51.派生类的对象对它的基类成员中(A)是可以访问的。
A.公有继承的公有成员;
B.公有继承的私有成员;
C.公有继承的保护成员;
D.私有继承的公有成员。
52.C++类体系中,不能被派生类继承的有(A)。
A.构造函数
B.虚函数
C.静态成员函数
D.赋值操作函数
53.下面标识符中正确的是(A)。
A._abcB.3abC.int
D.+ab
54.下列哪项(D)不是面向对象程序设计的主要特征?
a.封装
b.继承
c.多态
d.结构
6
二、填空题
1.C++语言的头文件与源程序文件扩展名分别是(.h
)和(.cpp)
。
2.在C++程序中使用基本输入与输出流时需要包含的头文件名是(<
iostream.h>
)
3.在C++语言中,惟一的一个三目运算运算符是(?
:
4.C++中当一个函数无返回值时,则函数的类型是(void
5.一个类中可以有(多
)个构造函数,只能有(一
)个析构函数。
6.一般情况下,按照面向对象的要求,把类中的数据成员(属性)定义为(私有
)权限,
而把成员函数(方法)定义为(公有
)权限.
7.在定义类的对象时,C++程序将自动调用该对象的(构造)
函数初始化对象自身.在撤销
类的对象时,C++程序将自动调用该对象的(析构
)函数.
8.类继承中,缺省的继承方式是(私有继承
).
9.在C++语言中,用转义字符序列('
\n'
10.表达式a=a+l表示成增量表达式为(++a
)或操纵符(endl
)表示输出一个换行符。
11.当不需要函数返回任何值时,则应把该函数类型定义为(void
12.用于输出表达式值的标准输出流对象是(cout
,用于从键盘上为变量输人值的标
准输人流对象是(cin
13、变量分为全局和局部两种,(全局变量默认初始化为0
变量没有赋初值时,其值是不确定的。
14、假定类AB中有一个公用属性的静态数据成员bb,在类外不通过对象名访问该成员bb
的写法为(AB:
bb
15、类的成员分为__数据成员__和_成员函数_。
16、一个__类__和__对象__的关系,正如基本数据类型与该类型的变量一样,如intx;
17、对一个类中的数据成员的初始化可以通过构造函数中的__赋值__实现,也可以通过构造
函数中的__初始化列表__实现。
18、类有两种用法:
一种是_定义对象_,即生成类的对象;
另一种是通过_派生,派生出新
的类。
19、C++语言提供的多态_机制允许一个派生类继承多个基类,即使这些基类是相互无关
的。
20、声明虚函数的方法是在基类中的成员函数原型前加上关键字_virtual___。
21、如果一个类中有一个或多个纯虚函数,则这个类称为虚基类_。
22、静态数据成员在定义或说明时,前面要加上关键字_static___。
23、如果成员函数不需要访问类的_非静态_成员,则可以把它声明为静态成员函数。
24、友元可以是_全局函数_,也可以是其他成员函数。
25、若需要把一个函数“voidfun();
”定义为一个类A的友元函数,则应在类A的定义中
加入一条语句:
friendvoidfun()。
26、运算符函数中的关键字是_operator_,它和运算符_一起组成该运算符函数的函数名。
7
29、构造函数是_对象___被创建时自动执行,对象消失时自动执行的成员函数称为_析构函数_。
30、如果类A继承了类B,则类A称为_派生类___,类B称为_基类___。
31、如果一个特定的类型S当且仅当它提供了类型T的行为时,则称类型S是类型T的_子类_。
34、友元函数的声明可以放在类的私有部分,也可以放在类的公有部分,它们是没
有区别的。
35、如果说类B是类A的友元类,则类B的所有成员函数都是类A的成员函数。
36、设a和b是两个整型变量,我们用a+b的形式求这两个变量的和;
设c和d为浮点型变
量,我们用c+d的形式求这两个变量的和。
显然运算符“+”具有不同的用途,这是运算符重载的例子。
37、当建立新的对象时,程序自动调用该类的构造函数。
38、在C++中有二种参数传递方式:
传值和引用。
39、模板对处理数据的类型的要求不同可以分为两种类型:
函数模板和类模板。
40、异常是通过检查(try)抛出(throw)和捕捉(catch)来实现的。
41、虚函数实现了C++的多态机制,类实现了C++的封装机制。
42、面向对象程序设计的继承机制提供了重复利用程序资源的一种途径。
三、问答题(请以谭浩强版教材为重点,理解和掌握下列基本概念,做出简明
扼要的回答,内容自行翻书)
1.在C++中,结构(struct)和类(class)的区别是什么?
答:
在c里结构体只能定义数据成员,不能有函数成员,但可以定义函数指针来模拟函数。
在C++中,结构体和类除了默认的访问方式和默认的继承方式不同外,其它都一样。
结构体默认是公有,类默认是私有。
2.构造函数和析构函数的主要作用是什么?
构造函数只是起初始化值的作用,但实例化一个对象的时候,可以通过实例去传递参数,从主函数传递到其他的函数里面,这样就使其他的函数里面有值了。
析构函数与构造函数的作用相反,用于撤销对象的一些特殊任务处理,可以是释放对象分配的内存空间。
8
27、类中运算符重载一般采用两种形式:
_成员函数_和友元函数_。
28、面向对象程序设计的3大机制为:
_封装性_、_继承性_和多态性_。
2、类的访问权限有
private、protected和public三种。
32、在类定义中,将=0置于虚函数的函数原型的末尾可以声明该函数为纯虚函数。
33、类的静态成员分为静态数据成员和静态成员函数。
四、读程序题,写出程序运行输出的结果。
1.#include<
iostream>
usingnamespacestd;
classStudent
{private:
charName[8];
floatMath;
floatChinese;
public:
floataverage;
voidSetName(char*name);
voidSetMath(floatmath);
voidSetChinese(floatch);
floatGetAverage(void);
};
classStudent1
{
charID[12];
floattotal;
//“标记1”
voidSetTotal(floatsum){};
//“标记2”
voidmain()
{StudentS1,S2;
Student1S3;
cout<
thesizeofobjectS1is:
<
sizeof(S1)<
endl;
thesizeofobjectS3is:
sizeof(S3)<
}
9
(a)该程序运行后,输出结果是:
20
16
(b)如果修改程序:
在“标记1”代码行前面加入static,在“标记2”代码行前加入
virtual,那么输出结果是:
(注:
sizeof()对类体的计算如下:
1.空类的大小为1字节。
3.c++规定任何类型的指针大小为4个字节。
5.静态变量在计算时是不做考虑的。
2.int占4字节,char型占1字节,float型占4字节。
4.一个虚函数也占4个字节的指针内存。
6.其他成员函数(如构造,析构函数)不纳入计算,因为成员函数是针对类体的;
而sizeof()只针对实例。
2.#include<
classA{
floatx,y;
public:
A(floata,floatb)
{x=a;
y=b;
初始化自动局部对象\n"
A(){
x=0;
y=0;
cout<
初始化静态局部对象\n"
A(floata)
{x=a;
初始化全局对象\n"
}
~A(){cout<
“调用析构函数”<
Aa0(100.0);
//定义全局对象
voidf(void)
{cout<
进入f()函数\n"
Aab(10.0,20.0);
//定义局部自动对象
staticAa3;
//初始化局部静态对象
voidmain(void)
进入main函数\n"
f();
3.如果在缺省目录下有文件,文件中内容为:
12345
执行下列程序后
#include<
fstream>
10
2、输出结果:
初始化全局对象
进入main函数
进入f()函数
初始化自动局部对象
初始化静态局部对象
调用析构函数
fstreamf1;
inttmp,sum=0;
f1.open("
ios:
in);
while(f1>
>
tmp)
sum+=tmp;
f1.close();
sum<
程序的输出是:
15(1+2+3+4+5=15)
五、编程题
1.掌握基类和派生类的编程设计方法。
复习范围包括:
1)上机实验作业2)课堂上所讲的PPT示例3)谭版教材例子,比如
点、矩形、三角形、圆的派生类,周长、面积等成员函数。
2.掌握文本文件和二进制文件读写的编程设计方法。
1)上机实验作业2)课堂上所讲的PPT示例。
11
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 复习题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)