c++面向对象复习题答案版doc.docx
- 文档编号:11310885
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:56
- 大小:31.58KB
c++面向对象复习题答案版doc.docx
《c++面向对象复习题答案版doc.docx》由会员分享,可在线阅读,更多相关《c++面向对象复习题答案版doc.docx(56页珍藏版)》请在冰豆网上搜索。
c++面向对象复习题答案版doc
一、填空题
++中有两种数据类型:
(char
)和
(int
long
)可以使用
signed修饰符。
在C++中,用数组、指针、和
(
引用
)作为函数参数,能够将参数值带回。
2.为了降低函数调用的时间开销,建议将小的调用频繁的函数定义为(
内联函数
),方法是
在函数类型前加上(
inline)关键字。
3.面向对象的程序设计有四大特征,它们是抽象、封装、
(
继承
)、(
多态
)。
4.拷贝构造函数是在用一个对象初始化另一个对象时被调用,
系统缺省的拷贝构造函数的工
作方法是
(
把对象的每个数据成员的值都复制到新建立的对象中
)。
5.用
new
申请某一个类的动态对象数组时,在该类中必须能够匹配到
(该类的)构造函数,否
则应用程序会产生一个编译错误。
6.静态数据成员必须在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象(共
享)。
7.在C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型(不同)。
8.在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设
计的(
封装
)特性。
9.预编译指令由三种,它们是:
文件包含、
(宏定义
)和(
条件编译
)。
10.
静态的成员函数没有隐含的
(this),所以,它们只能直接访问类的静态的数据成员。
11.
在C++中,函数的参数有两种传递方式,它们是值传递和
(
地址)。
12.
当非静态成员函数被调用时,该成员函数的
(this)指向调用它的对象。
13.
拷贝构造函数使用
(引用
)作为参数初始化创建中的对象。
14.
在公有继承的情况下,基类数据成员在派生类中的访问权限
(不变)。
15.
在C++中,构造派生类对象时,总是先从
(基类)的初始化开始的。
16.
当需要统计程序中某个类创建对象的个数时,需要给该类定义(
静态数据)成员。
17.
在多个类之间有重复继承时,为避免被重复继承的基类数据成员在内存中有多个拷贝,
应将该基类定义为(
虚基类)。
18.
在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为
(抽象类
),定
义该类至少具有一个
(纯虚函数
)。
19.
在C++中构造一个对象时,其数据成员在构造函数中初始化。
对于内嵌的对象、
(常
量)、(引用)数据成员需要在构造函数的成员初始化列表中初始化。
20.
在类的定义中,说明为protected的数据成员称为保护成员。
保护数据成员具有双重作用:
对于其派生类而言,
(可以访问);而对于其外部的程序而言,
(不可以访问)。
21.
控制格式输出的
操纵符中,(setprecision)是设置数据精度的,(hex
)是设置十六进制的。
22.
如果s是int型变量,且s=6,则下面
s%2+(s+1)%2表达式的值为__0_
_。
23.已知字母a的ASCII码为十进制数
97,且设ch为字符型变量,则表达式
ch=’a4’的+值
为_e___。
24.数组与函数参数联系密切,当用数组元素作函数参数时,这是属于值传递;当数组名作
为参数时,这是属于地址传递,对形参的改变可影响到实参。
25.利用“对象名.成员变量”形式访问的对象成员仅限于被声明为
公有
的成员;若要
访问其他成员变量,需要通过
公有
函数或友元函数函数。
26.一个__类____和__对象___的关系,正如基本数据类型与该类型的变量一个。
27.类成员的默认访问方式是
_私有的_____.
28.一个类有_多个____个构造函数,有_一个____析构函数。
29.类的__静态___成员函数不能对类中的非静态成员进行默认访问。
30.如果说明类B是类A的友元类,则类B的所有成员函数都是类
A的_友元函数
_____。
31.利用成员函数对二元运算符重载,
其左操作数为
对象
,右操作数为
实际
参数
。
32.类有两种用法:
一种是类的实例化,即生成类的
__模板类____;另一种是通过__基类
_____派生出新的类。
33.运算函数中的关键字是__operator
____,它和运算符一起组成该运算符函数的函数名。
34.如果一个类中有一个或多个纯虚函数,则这个类称为
__抽象类____。
35.文件的打开是通过使用类
___对象_____的成员函数来实现的。
36.设所有变量均为整型,则表达式(
e=2,f=5,e++,f++,e+f)的值为_9___。
37.已知c的ASCII码为十进制数
99,设k为字符型变量,则表达式k=‘c’+1的值为___d_____。
38.函数的形参在未被调用之前
不被
分配空间,函数的形参的类型
要
和实参的相同。
39.类的成员分为数据成员和
___成员函数____。
40.类完成了面向对象程序设计的
_抽象____特性。
41.构造函数是_对象_____被创建时自动执行,对象消失时自动执行的成员函数称为
__析构
_____对象
43.在继承机制下,当对象消亡时,编译系统先执行
派生类
的析构函数,然后才执行
派生类中子对象类的析构函数,最后执行
基类
的析构函数。
44.类的__静态_____数据成员是类所有对象共享的成员。
45.友元函数__不是____类的成员函数。
(是/不是)
46.如果类A继承了类B,则类A称为__派生类_____,类B称为__基类_____。
47.运算符重载后,原运算符的优先级和结合特性__不会___改变。
(会/不会)
48._纯虚函数_____是一个在基类中说明的虚函数,
但未给出具体的实现,
要求在其派生类
实现。
49.文件的关闭是通过通过使用类
________的成员函数________来实现的。
(去掉)
二、选择题
1.面向对象的(B)是一种信息隐蔽技术,目的在于将对象的使用者与设计者分开。
不允许使用者直接存取对象的属性,只能通过有限的接口与对象发生联系。
A.多态性B.封装性C.继承性D.重用性
2.C++的合法注释是(B)。
A./*ThisisaCprogram/*
B.+
B.<=
C.=
D.%
5.已知
a=4,b=6,c=8,d=9,则“(a++,b>a++&&c>d)++d:
a
D)。
A.9
B.6
C.8
D.0
6.对
while、dowhile循环结构,下面说法正确的是(
B)。
A.只是表达形式不同
B.dowhile结构中的语句至少执行一次
C.while
结构中的语句至少执行一次
D.条件成立时,它们有可能一次也不执行
7.对中断语句的说法下面不正确的是(
B)。
A.用户可以指定中断的位置B.用户可以指定转移的位置
C.break语句可以跳出本循环D.continue语句可以结束本次循环
8.以下正确的说法是(D)。
A.用户若需要调用标准函数,调用前必须重新定义
B.用户可以直接调用所有标准库函数
C.用户可以定义和标准库函数重名的函数,但是在使用时调用的是系统库函数
D.用户可以通过文件包含命令将系统库函数包含到用户源文件中,然后调用系统库函数
9.下列哪个不是重载函数在调用时选择的依据(
D)。
A.参数类型
B.参数个数
C.函数类型
D.函数名
10.对数组名作函数的参数,下面描述正确的是(B)。
A.数组名作函数的参数,调用时将实参数组复制给形参数组
B.数组名作函数的参数,主调函数和被调函数共用一段存储单元
C.数组名作参数时,形参定义的数组长度不能省略
D.数组名作参数,不能改变主调函数中的数据
11.如果
x是整型变量,则合法的形式是
(
D
)。
A.&(x+5)
B.*x
C.&*x
D.*&x
12.在定义一个共用体变量时,系统为其分配存储空间的原则是(
B
)。
A.按所有成员需要的存储空间总和分配。
B.按成员中占存储空间最大者分配。
C.按成员占存储空间最小者分配。
D.按第一个成员所需的存储空间分配。
13.下面(
B
)项是对构造函数和析构函数的正确定义。
A.voidX:
:
X(),
voidX:
:
~X()
B.X:
:
X(参数),
X:
:
~X()
C.X:
:
X(参数),
X:
:
~X(参数)
D.voidX:
:
X(参数),voidX:
:
~X(参数)
14.拷贝构造函数具有的下列特点中,(D)是错误的。
A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的
B.拷贝构造函数只有一个参数,并且是该类对象的引用
C.拷贝构造函数是一种成员函数
D.拷贝构造函数的名字不能用类名
15.类的析构函数的作用是(D)。
A.一般成员函数B.类的初始化C.对象初始化D.删除对象
16.下列对派生类的描述中,(D)是错误的。
A.一个派生类可以作为另一个派生类的基类
B.派生类至少有一个基类
C.派生类的成员除了它自己的成员外,还包含了它的基类成员
D.派生类中继承的基类成员的访问权限到派生类保持不变
17.继承具有(B,C),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。
A规律性
B.传递性
C.重复性
D.多样性
18.C++类体系中,能被派生类继承的是(
A,B,C
)。
A.构造函数
B.虚函数
C.析构函数
D.友元函数
19.下列关于动态联编的描述中,错误的是(D)。
A.动态联编是以虚函数为基础
B.动态联编是运行时确定所调用的函数代码的
C.动态联编调用函数操作是指向对象的指针或对象引用
D.动态联编是在编译时确定操作函数的
20.关于纯虚函数和抽象类的描述中,错误的是(C)。
A.纯虚函数是一种特殊的虚函数,它没有具体的实现
B.抽象类是指具有纯虚函数的类
C.一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类
D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
21.C++源文件的扩展名为(A)。
A.cpp
B.c
C.txt
D.exe
22.在C++语言中,(A)的陈述是正确的。
A.能使用关键字并区分大小写B.能使用关键字并不区分大小写
C.不能使用关键字并区分大小写D.不能使用关键字并不区分大小写
23.运算符+、=、*、>=中,优先级最高的运算符是(C)。
A.+
B.=
C.*
D.>=
24.下列不合法的变量名为(
A
)。
A.intB.int1C.name_1D.name0
25.已知x=43,ch=‘A’,y=0;则表达式(x>=y&&ch<’B’&&!
y)的值是(
C
)。
A.0
B.语法错
C.1
D.“假”
A.语句
for(i=0;;i++)表示无限循环
B.for(;;)表示无限循环
26.以下不正确的是(
c)。
C.for()也表示无限循环
D.while
(1)表示无限循环
27.在函数的返回值类型与返回值表达式的类型的描述中,错误的是(
B,D
)。
A.函数返回值的类型是在定义函数时确定,在函数调用时是不能改变的
B.函数返回值的类型就是返回值表达式的类型
C.函数返回值表达式类型与返回值类型不同时,函数表达式类型应转换成返回值类型
D.函数返回值类型决定了返回值表达式的类型
28.如果一个函数无返回值,定义时它的函数类型应是(C)。
A.任意
B.int
C.void
D.无
29.在
C++语言中,关于参数默认值的描述正确的是(
A,B)。
A.只能在函数定义时设置参数默认值
B.设置参数默认值时,应当从右向左设置
C.设置参数默认值时,应当全部设置
D.设置参数默认值后,调用函数不能再对参数赋值
30.若有以下定义,则说法错误的是(D)。
inta=100,*p=&a;
A.声明变量p,其中*表示p是一个指针变量
B.变量p经初始化,获得变量a的地址
C.变量p只可以指向一个整形变量
D.变量p的值为100
31.列关于结构体的说法错误的是(D)。
A.结构体是由用户自定义的一种数据类型
B.结构体中可设定若干个不同数据类型的成员
C.结构体中成员的数据类型可以是另一个已定义的结构体
D.在定义结构体时,可以为成员设置默认值
32.下列有关类的说法不正确的是(C)。
A.对象是类的一个实例
B.任何一个对象只能属于一个具体的类
C.一个类只能有一个对象
D.类与对象的关系和数据类型与变量的关系相似
33.(C)的功能是对象进行初始化。
A.析构函数
B.数据成员
C.构造函数
D.静态成员函数
34.关于友元的描述中,(
A
)是错误的。
A.友元函数是成员函数,它被说明在类体内
B.友元函数可直接访问类中的私有成员
C.友元函数破坏封装性,使用时尽量少用
D.友元类中的所有成员函数都是友元函数
35.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问
权限定义为(
A,B,C
)。
B.protected
D.static
36.派生类的对象对它的(
A,B,D
)是可以访问的。
A.公有继承的基类的公有成员
B.公有继承的基类的保护成员
C.公有继承的基类的私有成员
D.保护继承的基类的公有成员
37.多继承派生类构造函数构造对象时,
(B
)被最先调用。
A.派生类自己的构造函数B.虚基类的构造函数
C.非虚基类的构造函数D.派生类中子对象类的构造函数
38.C++类体系中,不能被派生类继承的有(C)。
A.构造函数B.虚函数C.静态成员函数D.赋值操作函数
39.编译时的多态性可以通过使用(A,D)获得。
A.虚函数和指针B.重载函数和析构函数
C.虚函数和对象D.虚函数和引用
40.下列描述中,(A)是抽象类的特征。
A.可以说明虚函数B.可以进行构造函数重载
C.可以定义友元函数D.不能说明其对象
三、指出并改正下列程序段中的语法错误。
题目
答案
1.
型不一致
floatx=3.26f;
int&ref1=x;
2.2.常指针
intd1=3,d2=2;
int*constdp=&d1;
dp=&d2;
*dp=5;
型不一致
3.
4.
4.标识符得字母开头
voidfunc(intfirst,int2_secnd);
5.
5.“=”运算符重载函数返回类型不对
voidPixel:
:
operator=(Pixel&p1,Pixel&p2);
这里this是指向常量的常指针
6.
2、指出并改正下列程序段中的语法错误。
题目答案
1.
intx=13;
constint&ref=x;
ref=10;
2.
double*fp;
fp=newint(3);
3.voidfunc(first,intsecnd);
4.
5.
friendPixel&operator=(Pixel&p1,Pixel&p2);
6.
四、程序填空
1.编写函数将字符串按逆序存放。
#include<>
#include<>
#include<>
voidmain()
{inti,n;
chars[100],temp;cout<<"inputstring:
"< (1)get(s); n= (2)strlen(s);for(i=0;i {temp=s[i];s[i]=s[n-i-1];s[n-i-1]=temp;} cout<<"Now,string: "< puts(s); } 1.常引用不能赋值了 2.类型不一致 3.first不是类型说明 能有“void” 5.不能定义友元函数,只能是成员函数。 2.下列程序定义了类Pixel,请完成前置++和后置++的运算符函数的定义。 classPixel{ intx,y; public: Pixel(intxx=0,intyy=0){x=xx;y=yy;} Pixeloperator++(); Pixeloperator++(int); voiddisplay(); }; PixelPixel: : operator++() { x++;y++; return (3) *this } PixelPixel: : operator++(int) { x++; ( 4)Pixely++; temp=*this; return (5) temp; } voidPixel: : display() { cout<<"("< } 3.根据给定的程序执行结果,将下列程序补充完整。 #include<> classBase{ public: (6)Base(){cout<<”DeleteDerived< }; classDerived: publicBase{ public: (7)Derived(){cout<<”DeleteBase< }; voidmain() { Base*p1=(8)newDerived; deletep1; } 程序的执行结果如下: DeleteDerived DeleteBase 4.定义一个字符串类String,有两个私有数据成员: char*content和intlen;要求 1)在构造函数中提示用户输入字符串,; 2)用户能提取和显示字符串;(分别由两个函数完成) 3)实现对字符串中所有小写字母变成大写,并显示。 注意内存的分配与释放。 类定义的部分代码如下,请补充代码使类的定义完整。 #include<> #include #include<> classString{ char*content; intlen; public: String(); ~String(){ ( 1 )deletecontent[]; } voiddisplay(); voidupper_str(); char*get_str()const{ ( 2 )returncontent; } }; String: : String(){ charch[50];< voidString: : upper_str(){ for(inti=0;i if ( 4 )(’a’<=content[i]&&content[i]<= ’z’) content[i]= ( 5 ) content[i]+32; } 5.下列程序定义了类Point,请完成前置--和后置--的运算符函数的定义。 classPoint{ floatx,y; public: Point(floatxx=0,floatyy=0){x=xx;y=yy;} Pointoperator--(); Pointoperator--(int); voiddisplay(); }; PointPoint: : operator--() { x--;y--; return ( 6)*this; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 面向 对象 复习题 答案 doc
![提示](https://static.bdocx.com/images/bang_tan.gif)