C++练习题面向对象Word下载.docx
《C++练习题面向对象Word下载.docx》由会员分享,可在线阅读,更多相关《C++练习题面向对象Word下载.docx(31页珍藏版)》请在冰豆网上搜索。
classCsample
{
inta;
Csample(Csampleample);
Csample(intval):
a(val)
{}
~Csample();
};
6、判断下面程序的输出:
#include"
iostream.h"
inta=0,b=0;
classA
public:
inta,b;
voidf(intc=2,intd=3)
{
a=c;
b=d;
}
voidf(intc=3,intd=4)
b=d;
An;
n.f();
n.a<
'
'
n.b<
endl;
f();
n.f(7,8);
a<
b<
7、关于缺省构造函数的下述描述中,是错误的。
A.如果没有定义构造函数或缺省构造函数,编译器会自动生成缺省构造函数。
B.如果类有缺省构造函数,则可以不传递参数而定义类对象。
C.缺省构造函数不对类对象数据成员赋初值。
D.如果定义了类的构造函数,则编译器不再生成缺省构造函数。
8、下面程序输出结果为。
#include"
public:
virtualvoidf()
{cout<
"
A:
:
f()"
voidg()
{f();
}
classB:
publicA
virtualvoidf()
B:
{Aa2;
a2.g();
A*pa=newB();
pa->
f();
Bb;
b.f();
a2=b;
a2.f();
A&
a=b;
a.f();
deletepa;
9、以下哪种构造函数不是单参数构造函数?
A.复制构造函数
B.只有第一个参数,其它参数为缺省的构造函数。
C.缺省构造函数。
D.转换构造函数。
10、下面的程序中有什么错。
#include”iostream.h”
{private:
inta;
voidf1()const
a=2;
’‘<
intf2(constintc)
a=3;
c=a;
returnc;
};
constint*f3()
staticintz=0;
z++;
return&
z;
voidmain()
Aa;
a.f1()<
a.f2(3);
*f3()=5;
*f3();
11、下面程序中对成员函数f1()﹑f2()﹑f3()的访问中,错误的是。
voidf1()
cout<
f1()called"
protectedA
voidf2()
f2()called"
classC:
privateB
voidf3()
f1();
f3called"
Cc;
c.f2();
c.f3();
b.f2();
12、派生类的构造函数的成员初始化列表中,不能包含。
A.基类的构造函数。
B.派生类中对象成员的初始化。
C.基类中对象成员的初始化。
D.派生类中一般数据成员的初始化。
13、有关虚基类的描述中错误的是。
A.最派生类构造函数中的虚基类构造函数会被调用。
B.虚基类可以消除二义性。
C.每个派生类构造函数成员初始化器表中都包含有对虚基类构造函数的调用,故虚基类构造函数会被调用多次。
D.虚基类只有一个。
14、关于虚析构函数的下述描述中,是错误的。
A.基类中析构函数为虚析构函数,则派生类中的析构函数也为虚析构函数。
B.虚析构函数能保证delete运算符有效的释放基类及派生类对象。
C.将析构函数定义为虚析构函数是因为类中有虚函数。
D.虚析构函数并不能实现动态联编。
15、关于纯虚函数和抽象类的描述中,是错误的。
A.纯虚函数没有函数体。
B.抽象类及其派生类都可以定义对象。
C.若某个成员函数为纯虚函数,则该类为抽象类。
D.抽象类通常在类结构的顶层。
16、判断下面程序的输出结果。
#include"
string.h"
A(char*st);
~A();
staticinta;
private:
charstring[50];
A(char*st)
strcpy(string,st);
string<
~A()
a=2;
voidfun()
AFunobj("
fun"
);
staticAStaobj("
sta"
AGlobobj("
Glob"
intb=A:
AMainobj("
Main"
cout<
for(inti=0;
i<
i++)
fun();
17、下面的语句中使用错误的为。
#include<
iostream.h>
classctest
staticintcount;
inttest;
staticintgetcount()
count=test;
returncount;
intsettest(constint&
test=a;
returntest;
intctest:
count=5;
constctestt1;
t1.settest(5);
t1.getcount();
18、下面程序输出结果。
A(intj){b=j;
intfun(intc)
{return(a+b*c);
intb;
Ax(8);
intA:
*pa;
pa=&
x.*pa=6;
int(A:
*pf)(int);
pf=A:
fun;
A*p=&
x;
(p->
*pf)
(2);
19、下面程序的输出结果为。
A()
{a=0;
A'
sD.C.\n"
;
A(inti)
{a=i;
sC.\n"
~A()
{cout<
sD.\n"
{
Aa1;
Aa2[4]={
A(),
a1,
5,
2.3
20、下面程序输出结果。
A(constchar*s)
s<
~A(){}
virtualpublicA
B(constchar*s1,constchar*s2)
A(s1)
s2<
C(constchar*s1,constchar*s2)
classD:
publicC,publicB
D(constchar*s1,constchar*s2,
constchar*s3,constchar*s4)
B(s1,s3),C(s1,s2),b(s3,s4),a(s1),A(s4)
s1<
Aa;
Bb;
D*ptr=newD("
A"
"
B"
C"
D"
deleteptr;
21、下面程序输出结果。
virtualvoidact1();
voidact2();
voidact3(){act1();
act2();
voidA:
act1()
A1"
act2()
A2"
{public:
voidact1();
voidB:
B1"
B2"
a1=b;
A*a2=newA();
b.act3();
b.act1();
a1.act3();
a1.act1();
a2->
act3();
22、下面程序输出结果。
A(){}
f\n"
voidh()
h"
B(){f();
publicB
C(){}
C:
voidg(A*aa)
aa->
h();
B*bp=newC;
g(bp);
bp->
h()
deletebp;
23、下面程序输出结果。
A(inti,intj){a=i,b=j;
voidmove(intx,inty)
{a+=x;
b+=y;
voidshow()
protected:
inta,b;
B(inti,intj,intk,intl)
A(i,j),x(k),y(l)
{}
x<
y<
voidfun(){move(7,8);
voidf1(){A:
show();
intx,y;
Ae(5,6);
Bd(1,2,3,4);
d.fun();
d.show();
e.show();
d.f1();
24、下面程序输出结果。
virtual~A()
~A\n"
~B()
~B\n"
A*a1;
A*a2=newB();
a1=&
25、下面程序输出结果。
A(inti)
{m=i;
CON."
m<
A(inti,intj)
j=8;
'
j<
voidprint()
DES."
intm;
Amy=5;
my.print();
my=6;
26﹑阅读下面程序并填空:
classcmessage
char*buffer;
cmessage()
{buffer=newchar('
\0'
cmessage(
(1))
(2)
~cmessage()
{deletebuffer;
voiddisplay()
buffer<
\n'
voidset(char*string)
{delete[]buffer;
buffer=newchar[strlen(string)+1];
strcpy(buffer,string);
(3)operator=((4))
(5)
{cmessagemessage1;
message1.set("
hello"
cmessagemessage2(message1);
cmessagemessage3;
cmessagemessage4;
message4=message3=message2;
27.修改下面语句中错误。
inta1;
inta2;
protectA
intb1;
intb2;
classC:
privateB
intc1;
intc2;
intg()
c<
a2<
b1;
classD:
publicC
{private:
intd;
voidf()
a1<
b2;
{Dde;
de.b2;
de.c2;
28填空下面程序将++运算符重载为成员函数。
classcounter
counter(){v=0;
(1)operator++
(2)
v++;
return(3);
(4)operator++(5)
countert;
t.v=v++;
return(6);
voidprint()
v<
unsignedv;
counterc;
counterd;
for(intj=0;
8;
j++)
{d=c++;
d.print();
for(j=0;
{d=++c;
29.下面程序中错误语句:
vitualvoidf()=0;
cin>
>
a>
b>
endl<
A*a=newB();
a.f();
b.A:
deletea;
30、下面程序输出。
intj;
A()
{j=0;
A(A&
{j=a.j;
con1"
A(intd)
{j=d;
con2"
des"
Af1(Aa)
Ab;
b=a;
returnb;
An(5),m;
m=f1(n);
31.下面程序的输出结果。
A&
f1(constA&
staticAb;
Am;
m=f1(5);
32、下面程序的输出结果。
voidoperator=(constA&
j=a.j;
ope"
m=35;
An=36;
Ak=m;
m=n;
33、下面程序的输出结果。
staticintdys[]={30,28,31,30,31,
30,31,31,30,31,30,30};
classdate
intmo,da,yr;
date(intm,intd,inty)
{mo=m;
da=d;
yr=y;
date(){}
voiddisplay()
mo<
/"
da<
yr<
dateoperator+(intday)
datedt=*this;
day+=dt.da;
while(day>
dys[dt.mo-1])
{
day-=dys[dt.mo-1];
if(++dt.mo==13)
{
dt.mo=1;
dt.yr++;
}
}
dt.da=day;
returndt;
dated1(12,10,2003),d2;
d2=d1+60;
d2.display();
34、指出下面程序的语句中的错误。
{a=i;
voidfa()
{c