c++面向对象复习题答案版要点Word文档下载推荐.docx
《c++面向对象复习题答案版要点Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《c++面向对象复习题答案版要点Word文档下载推荐.docx(34页珍藏版)》请在冰豆网上搜索。
![c++面向对象复习题答案版要点Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/21/0ed05d89-3bef-423c-8f24-4a550fb2b553/0ed05d89-3bef-423c-8f24-4a550fb2b5531.gif)
参数。
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)是一种信息隐蔽技术,目的在于将对象的使用者与设计者分开。
不允许使用者直接存取对象的属性,只能通过有限的接口与对象发生联系。
2.C++的合法注释是(B)。
A.
/*ThisisaCprogram/*
B.
//ThisisaCprogram
C.
“ThisisaCprogram”
D.
/*ThisisaCprogram//
3.关于
C++和C语言的描述中,(
C
)是错误的?
C是C++的一个子集
B.C程序在C++环境可以运行
C++程序在C环境可以运行
D.C++是面向对象的而C是面向过程的
4.运算符+、<=、=、%中,优先级最低的运算符是(C)。
A.+B.<
=C.=D.%
5.已知a=4,b=6,c=8,d=9,则"
(a++,b>
a++&
&
c>
d)?
++d:
a<
b”值为(D)。
A.9B.6C.8D.0
6.对while、do…while循环结构,下面说法正确的是(B)。
A.用户若需要调用标准函数,调用前必须重新定义
B.用户可以直接调用所有标准库函数
C.用户可以定义和标准库函数重名的函数,但是在使用时调用的是系统库函数
D.用户可以通过文件包含命令将系统库函数包含到用户源文件中,然后调用系统库函数
9.下列哪个不是重载函数在调用时选择的依据(D)。
A.参数类型B.参数个数C.函数类型D.函数名
10.对数组名作函数的参数,下面描述正确的是(B)。
A.数组名作函数的参数,调用时将实参数组复制给形参数组
B.数组名作函数的参数,主调函数和被调函数共用一段存储单元
C.数组名作参数时,形参定义的数组长度不能省略
D.数组名作参数,不能改变主调函数中的数据
11.如果x是整型变量,则合法的形式是(D)。
A.&(x+5)B.*xC.&
*xD.*&
x
12.在定义一个共用体变量时,系统为其分配存储空间的原则是(B)。
A.按所有成员需要的存储空间总和分配。
B.按成员中占存储空间最大者分配。
13.下面(B)项是对构造函数和析构函数的正确定义。
A.voidX:
:
X(),voidX:
~X()
B.X:
X(参数),X:
C.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•cppB•cC•txtD•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.0B.语法错C.1D.“假”
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.intC.voidD.无
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
C.可以定义友元函数D•不能说明其对象
三、指出并改正下列程序段中的语法错误。
题目
答案
floatx=3.26f;
int&
ref仁x;
〃float
1.类型不一致
2.
intd1=3,d2=2;
int*constdp=&
d1;
dp=&
d2;
*dp=5;
2.常指针
3.//Nums为已定义的类Nums*fp;
fp=newint[4];
3.类型不一致
4.
voidfunc(intfirst,int2_secnd);
4.标识符得字母开头
5.
voidPixel:
operator=(Pixel&
p1,Pixel&
p2);
5.“=”运算符重载函数返回类型不对
6.//Pixel有两个整型成员x和yPixelPixel:
operator+=(Pixle&
p)const{
x+=p.x;
y+=p.y;
return*this;
}
6.在这里this是指向常量的常指针
2、指出并改正下列程序段中的语法错误。
intx=13;
constint&
ref=x;
ref=10;
1.常引用不能赋值了
double*fp;
fp=newint(3);
2.类型不一致
3.voidfunc(first,intsecnd);
3.first不是类型说明
4.//Pixel有两个整型成员x和y,其拷//贝构
造函数定义如下:
voidPixel(constPixle&
p);
4.不能有"
void”
friendPixel&
operator=(Pixel&
p1,
Pixel&
5.不能定义友元函数,只能是成员函数。
6.//Pixel有两个整型成员x和y
PixelPixel:
operator++(int)
{Pixeltemp;
temp=*this;
x++;
y++;
temp;
6.
四、程序填空
1编写函数将字符串按逆序存放。
#include<
iostream.h>
stdio.h>
string.h>
voidmain()
{inti,n;
chars[100],temp;
cout<
<
"
inputstring:
endl;
(1)get(s);
II
n=
(2)strlen(s);
for(i=0;
i<
n/2;
i++)
{temp=s[i];
s[i]=s[n_i_1];
s[n_i_1]=temp;
}cout<
Now,string:
puts(s);
2•下列程序定义了类Pixel,请完成前置++和后置++的运算符函数的定义。
classPixel{
intx,y;
public:
Pixel(intxx=0,intyy=O){x=xx;
y=yy;
}
Pixeloperator++();
Pixeloperator++(int);
voiddisplay();
};
operator++()
{
y++;
return(3)*this
operator++(int)
{
Pixeltemp=*this;
return(5)temp;
display()
("
x<
"
y<
)"
3•根据给定的程序执行结果,将下列程序补充完整。
#include<
classBase{
(6)Base(){cout<
”DeleteDerived<
Tend;
}
classDerived:
publicBase{
(7)Derived(){cout<
”DeleteBase<
^lend;
};
voidmain()
Base*p1=Derived__;
deletep1;
程序的执行结果如下:
DeleteDerived
DeleteBase
4.定义一个字符串类String,有两个私有数据成员:
char*content和intlen;
要求
1)在构造函数中提示用户输入字符串,;
2)用户能提取和显示字符串;
(分别由两个函数完成)
3)实现对字符串中所有小写字母变成大写,并显示。
注意内存的分配与释放。
类定义的部分代码如下,请补充代码使类的定义完整。
string>
#include<
stdlib.h>
classString{
char*content;
intlen;
String();
~String(){
(1)deletecontent[];
voidupper_str();
char*get_str()const{(2_)一returncontent;
String:
String(){
charch[50];
〃?
enterastring:
\n"
cin>
>
ch;
len=strlen(ch);
content=(3)newchar[50]:
if(!
content)
Memoryallocationeror!
exit
(1);
strcpy(content,ch);
voidString:
display(){cout<
content<
have"
len<
characters."
upper_str(){
for(inti=0;
len;
if(4)('
'
=content[i]&
content[i]<
content[i]=(5)content[i]+32;
5.下列程序定义了类Point,请完成前置--和后置--的运算符函数的定义。
classPoint{
floatx,y;
Point(floatxx=0,floatyy=0){x=xx;
Pointoperator--();
Pointoperator--(int);
PointPoint:
operator--()
x--;
y--;
return(6)*this;
operator--(int)
voidPoint:
6、程序填空,直接将答案写在空行上
math.h>
5
classComplex{
doublereal,image;
Complex(doubler=0,doublei=0){real=r;
image=i;
};
4friendostream&
operator<
(ostream
Complex&
);
5ostream&
(ostream&
outputComplex&
obj);
{output<
obj.real<
obj.image;
incolude<
//1classA{inta;
A(inti){a=i;
voidprint(){cout<
a<
classB{Aobj_a;
intb;
|
_B(inti):
obj_a(i)__{b=i;
voidprint();
__voidB:
print()_//3_{
obj_a.print();
cout<
b<
intmain()
{Bobj_b(3,4);
obj_b.print();
return0;
6returnoutput;
}
intmain()
4
Complexc;
c;
return0;
}//重载<
五、写出程序的运行结果
intmain(void)
charstr[]="
configuration"
第1题的运行结果如下:
configurationcniuain
cdef
char*p=str;
p<
for(inti=0;
sizeof(str);
i=i+2)cout<
str[i];
endl;
//字符c的ASCII码是99
4;
*p+i<
3.
第4题运行结果:
#include<
classNode{public:
intdata;
Node*next;
Node(intd,Node*q=0){data=