C++面向对象试题题型总结Word文档下载推荐.docx
- 文档编号:22044125
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:22
- 大小:23.98KB
C++面向对象试题题型总结Word文档下载推荐.docx
《C++面向对象试题题型总结Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C++面向对象试题题型总结Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
{
externintx,y;
cout<
<
add(x,y)<
endl;
}
intx=20,y=5;
intadd(inta,intb)
ints=a+b;
-1-
returns;
A.20B.5C.25D.编译会提示出错信息
12、关于常成员的描述中,错误的是B
A.常成员包含常数据成员和常成员函数两种
B.常数据成员必须是公有的
C.常数据成员要使用构造函数成员初始化列表进行初始化
D.常对象只能调用它的常成员函数,不能调用其它的成员函数
13、关于友元函数的描述中,错误的是B
A.友元函数不是成员函数
B.友元函数只能访问类中私有成员
C.友元函数破坏隐藏性,尽量少用
D.友元函数说明在类体内,使用关键字friend
14、如果有intx,*p;
floaty,*q;
则下面操作正确的是C
A.p=xB.p=q
C.p=&
xD.p=&
y
16、若数组名作实参而指针变量作形参,函数调用时实参传给形参的是D
A.数组的长度
B.数组第一个元素的值
C.数组所有元素的值
D.数组第一个元素的地址
17、对于动态分配内存空间描述正确的是D
A.使用new运算符分配的内存空间的长度必需是常量
B.delete运算符可以释放动态的存储空间和静态的存储空间
C.由new分配的内存空间是不连续的
D.delete运算符只能释放由new分配的动态存储空间
18、能够释放对象所占资源的是()A
A.析构函数B.数据成员
C.构造函数D.静态成员函数
19、虚函数的定义是在基类中进行的,定义时需要冠以关键字C
A.staticB.frend
C.virtualD.public
20、在C++中串流类是在头文件strstrea.h中定义的,下列不属于串流类的是)C
A.strstreamB.ostrstream
C.ofstreamD.istrstream
二、填空题(共9题16空,每空1分,共16分)
1、函数重载时,编译系统会根据__形参的类型__或__形参的个数__来区分。
与返回类型无关
2、若有chara[80];
则cin>
>
a表示从键盘上读入一个__字符串__到数组a中。
3、若希望用一个已有对象来构造另一个同类型的对象,可以使用__拷贝构造函数__来实现。
4、静态成员(static)属于__类__,而不属于__任何一个对象__,它被同一个类的所有对象共享。
5、类的继承方式有____继承、____继承和____继承。
public(或公有)private(或私有)protected(或保护)
6、重载运算符的含义必须清楚,不能有__二义性__。
7、按照联编进行阶段的不同,联编方法可分为两种:
__动态联编__和__静态联编__。
8、当基类中的某个成员函数被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义,在派生类中重新定义时,其函数原型,包括返回类型、__函数名__、__参数个数__、参数类型以及参数的顺序都必须与基类中的原型完全相同。
9、C++的I/O是以字节流的形式实现的,每个C++编译系统都带有一个面向对象的输入/输出软件包,这就是I/O流类库。
三、判断题(共10题,每题1分,共10分)
1、C++语言支持封装性和继承性,不支持多态性。
×
2、关系运算符可以用来比较两个字符的大小,也可用来比较两个字符串的大小。
)×
3、字符串"
sdfgh"
的长度是5。
√占用空间好像是6,字符串有个结尾符号占空间。
4、引用和指针都可作函数参数。
√
5、友元函数说明在类体内,它是一种成员函数。
说明(定义)在类外,声明在类里面
6、友元类必须被说明为公有成员。
7、纯虚函数是在基类中说明的虚函数,它在该基类中没有定义具体的操作内容。
8、析构函数不能被继承。
9、运算符重载以后,其优先级和结合性都不能改变。
10、在C++中,函数名实际上是一个指针,它指向函数的入口。
四、分析程序,回答所提出的问题(16分)
1、#include<
classB;
classA
public:
A(inti)
{a=i;
}
friendintF(A&
f1,B&
f2);
private:
inta;
classB
B(inti)
{b=i;
intb;
intF(A&
f2)\\可以访问类A,类B里的任何成员
return(f1.a+f2.b)*(f1.a-f2.b);
An1(10);
//a=10
第3/7页
Bn2(8);
//b=8
F(n1,n2)<
①写出程序的运行结果。
36
②该程序中共有几个对象,分别属于哪个类?
为什么在程序的开头处通过语句classB;
对类B进行声明?
③程序中的哪两条语句会分别调用A、B的构造函数?
写出这两个构造函数。
④函数F是什么函数?
它的作用是什么?
①36
②n1和n2两个对象,n1属于A类,n2属于B类。
因为B类的定义在A类后,而A类中要引用B类。
③语句An1(10);
和语Bn2(8);
A类的构造函数:
A(inti){a=i;
B类的构造函数:
B(inti){b=i;
④函数F是友元函数。
它的作用是:
提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间共享数据的机制。
(关键答出共享数据、或答出通过友元可以访问到封装与类A、B中的数据)
二、
五、阅读程序,写出运行结果(共2题,第1题6分,第2题8分,共14分)
intfunc(inta)
intb=0;
staticintc=4;
\\静态变量
b++;
c--;
return(a+b+c);
voidmain()
inta=2;
for(intj=0;
j<
2;
j++)
func(a+j)<
"
输出结果为:
66
注意66中间有空格
2、#include<
classX
X(inti)
{x=i;
cout<
”int:
”<
i<
’,’<
”called\n”;
X(doublei)
{x=(int)i*2;
”double:
~X()
{cout<
”~X():
x<
intx;
inta=8;
doubleb=11.0;
Xx1(55),x2(a*5);
Xx3=X(2*a);
Xx4=X(b);
int:
55,called//X1被创建
40,called//x2被创建
16,called//x3被创建
double:
11,called//x4被创建x值为22,显示的是i值,不改变
~x<
:
22,called//析构函数的调用顺序与构造函数调用顺序相反
16,called
40,called
50,called
六、编写程序(共2题,第1题10分,第2题14分,共24分)
1、输入一组数据以-1作为结束标志,要求删除其它数据只保留能被2整除的数据并输出结果。
#include<
intb[50],x,n=0;
cin>
x;
while(x!
=-1)
b[++n]=x;
for(inti=1,j=0;
=n;
i++)
if(b[i]%2==0)b[++j]=b[i];
for(i=1;
=j;
b[i]<
'
\t'
2、定义一个日期类Date,包含年、月、日三个数据成员,以及一个求第二天日期的成员函数和输出日期的成员函数。
classDate
intyear,month,day;
Date(inty,intm,intd)
year=y;
month=m;
day=d;
voidnextday();
voiddisplay()
year<
"
/"
month<
day<
voidDate:
nextday()
int
totaldays[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
day++;
intleap=(year%400==0||year%4==0&
&
year%100!
=0);
if(day>
totaldays[leap][month-1])
day=1;
month++;
if(month>
12)
month=1;
year++;
intd,m,y;
请输入年、月、日:
\n"
y>
m>
d;
Dated1(y,m,d);
今天是:
d1.display();
d1.nextday();
明天是:
填空题(每空1分,共14分)
观看以下程序:
classpoint{
voidshow(){cout<
”point”<
pointp1;
point*p;
p=&
p1;
_______________//通过对象p1访问show函数
______________//通过指针p访问show函数
在C++类中可以包含______________、______________和______________三种具有不同访问控制权的成员。
定义类时,在类头中将使用关键字_____________来表示类定义的开始。
如果一个类中至少有一个纯虚函数,则该类称为________________。
C++类的组成包括数据成员和______________,友元_____(是、不是)该类的成员函数。
友员函数是用关键字____________修饰的非成员函数。
若有:
inti;
int&
j=i;
i=10;
j=i+1;
则i=__________,j=__________。
8、new的功能是____________________,delete的功能是____________________。
选择题(每小题1.5分,共30分)
1、下列特性中不是面向对象程序设计语言所特有的是()。
(A)数据封装(B)继承(C)多态性(D)模板
2、()是给变量取一个别名,它引入了变量的同意词。
(A)指针(B)引用(C)枚举(D)结构
3、类成员的访问权限中,()只能被本类的成员函数和其友元函数访问。
(A)share(B)public(C)private(D)protected
4、关于构造函数,下列说法不正确的是()。
(A)构造函数名字和类名相同
(B)构造函数在创建对象时自动执行
(C)构造函数无任何函数返回类型
(D)构造函数有且只有一个
7、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是()
(A)面向过程 (B)面向对象 (C)安全性 (D)复用性
8、对于类中定义的成员,其隐含访问权限为()。
A.publicB.protected
C.privateD.static
9、下面有关重载函数的说法中正确的是()
(A)重载函数必须具有不同的返回值类型;
(B)重载函数形参个数必须不同;
(C)重载函数必须有不同的形参列表 (D)重载函数名可以不同;
10、有如下的对类“CSample”的说明,其中()是错误的。
classCSample{
A.inta=23;
B.CSample();
public:
C.CSample(intval);
D.~CSample();
11、在inta=3,int*p=&
a;
中,*p的值是()
A.变量a的地址值B.无意义
C.变量p的地址值D.3
12、每个类()构造函数。
(A)只能有一个(B)只可有公有的
(C)可以有多个(D)只可有缺省的
13、在一个类中可以对一个操作符进行()重载。
(A)1种(B)2种以下(C)3种以下(D)多种
14、在公有继承的情况下,基类非私有成员在派生类中的访问权限()
(A)受限制(B)保持不变(C)受保护(D)不受保护
15、应在下列程序划线处填入的正确语句是()
classBase
{public:
voidfun(){cout<
Base:
fun"
ENDL;
}
classDerived:
publicBase
{voidfun()
{_____________//显示调用基类的函数fun()
Derived:
}
(A)fun();
(B)Base.fun();
(C)Base:
fun();
(D)Base->
16、执行下面的程序将输出()
classBASE{
charc;
public:
BASE(charn):
c(n){}
virtual~BASE(){cout<
c;
};
classDERIVED:
publicBASE{
DERIVED(charn):
BASE(n+1),c(n){}
~DERIVED(){cout<
intmain()
{DERIVEDa('
X'
);
return0;
(A)XY
(B)YX
(C)X
(D)Y
下面描述中,表达错误的是()
(A)公有继承时基类中的public成员在派生类中仍是public的
(B)公有继承是基类中的private成员在派生类中仍是private的
(C)公有继承时基类中的protected成员在派生类中仍是protected的
(D)私有继承时基类中的public成员在派生类中是private的
18、定义析构函数时,应该注意()
(A)其名与类名完全相同(B)返回类型是void类型
(C)无形参,也不可重载(D)函数体中必须有delete语句
19、对于在类中定义的静态数据成员,下面正确的说法是()
A.该类的每个对象中都有一个静态数据成员
B.对象创建时产生
C.在类外进行初始化
D.既可以在类外初始化,也可以在类内初始化
20、C++中声明常量的关键字是()。
A.constB.externC.publicD.enum
改错题(每处2分,共6分)
使用VC6打开考生文件夹下的工程proj1,此工程包含一个源程序文件main.cpp,但该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:
member=0
member=5
menber=10
源程序文件main.cpp清单如下:
#include<
class
MyClass
{
MyClass(int
i){member=i;
void
SetMember(int
m){member=m;
int
GetMember()const{return
menber;
print()cont{cout<
member="
MEMBER<
private:
member;
};
voed
main()
{
MyClass
obj1;
//更正_____________________________
obj1.print();
obj2(3);
obj1.member=5;
//更正__________________________
MyClass.SetMember(10);
//更正_______________________
obj2.print();
写出下列程序的执行结果(每小题5分,共20分)
#include<
classSample
{intn;
Sample(inti){n=i;
friendintadd(Sample&
s1,Sample&
s2);
intadd(Sample&
s2)
returns1.n+s2.n;
voidmain()
Samples1(10),s2(20);
add(s1,s2)<
执行结果是:
intadd(intx,inty)
returnx+y+1;
doubleadd(doublex,doubley)
returnx+y-1;
inta=2,b=4;
doublec=2.6,d=7.4;
add(a,b)<
add(c,d)<
执行结果是:
3、
classA
intn;
classB:
virtualpublicA{};
classC:
classD:
publicB,publicC
intgetn(){returnB:
n;
Dd;
d.B:
n=10;
d.C:
n=20;
n<
4、
classmyclass
inta,b;
staticints;
myclass(intx,inty)
{a=x;
b=y;
s++;
voidprint()
{cout<
s<
intmyclass:
s=0;
voidmain()
myclassm1(1,2),m2(4,5),m3(6,7);
m1.print();
m2.print();
m3.print();
编程题(每题10分、共30分)
测试一个名为rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。
(10分)
定义一boat与car两个类,二者都有weight属性,定义二者的一个友元函数totalweight(),计算二者的重量和。
设计一个汽车类vehicle,包含的数据成员有车轮个数wheels和车重weight。
小车类car是它的派生类,其中包含载人数passenger_load。
每个类都有相关数据的输出方法。
在主程序中定义一个car类对象,对其车轮个数、车重、载人数进行设置并显示。
(1)p1.show();
p->
show()
(2)公有、私有、保护(3)class(4)抽象类
(5)成员函数、不是(6)friend(7)11、11(8)动态申请内存空间、释放由new申请的空间
1、D2、B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 面向 对象 试题 题型 总结