}
voidmain()
{
Ap;
p.charu(p.s);
p.shanchu(p.s);
p.sum(p.s);
p.dx(p.s);
}
运行结果:
插入前:
11223364557697885
输入要插入的数:
99
插入后:
1122336455769788599
输入要删除的数:
88
要删除的数不存在!
从新输入:
85
删除后:
11223364557697899
和为:
420
最大数:
99最小数:
1
Pressanykeytocontinue
7.设计一个包含一个整型数据域的链表类,可以实现链表节点的插入/删除、求最大/最小节点、统计节点数等功能。
解:
习题3继承与派生
1.仔细阅读下面的程序段,检查有无错误,若有错误,分析原因,并给出修改方案。
(1)
解:
一、x,y在Point类中为私有成员,不可以被Rectangle类继承,
public:
intx,y;
二、Point类的继承方式为保护,所以Move函数不可外调用,
classRectangle:
publicPoint
#include
classPoint
{
intx,y;
public:
Point(inta=0,intb=0)
{x=a;y=b;}
voidmove(intxoffset,intyoffset)
{x+=xoffset;y+=yoffset;}
intgetx(){returnx;}
intgety(){returny;}
};
classRectangle:
protectedPoint
{
intlength,width;
public:
Rectangle(intx,inty,intl,intw):
Point(x,y)
{
length=l;width=w;
}
intgetlength(){returnlength;}
intgetwidth(){returnwidth;}
};
voidmain()
{
Rectangler(0,0,8,4);
r.move(23,56);
cout<<}
(2)
解:
一、X、voiddisplay()同时存在于A类B类中,所以在C类中无法区别,
myc.A:
:
x=10;
myc.A:
:
display();
或
myc.B:
:
x=10;
myc.B:
:
display();
#include
classA
{
public:
intx;
A(inta=0){x=a;}
voiddisplay()
{cout<<"A.x="<};
classB
{
public:
intx;
B(inta=0){x=a;}
voiddisplay()
{cout<<"B.x="<};
classC:
publicA,publicB
{
inty;
public:
C(inta,intb,intc):
A(a),B(b)
{y=c;}
intgety(){returny;}
};
voidmain()
{
Cmyc(1,2,3);
myc.x=10;
myc.display();
}
(3)
解:
无错
ConstuctingbaseclassConstuctingbaseclassConstructingderivedclass
13,8,24
Destructingderivedclass
DestructingbaseclassDestructingbaseclassPressanykeytocontinue
#include
classBase
{
inti;
public:
Base(intn)
{
cout<<"Constuctingbaseclass";
i=n;
}
~Base()
{cout<<"Destructingbaseclass";}
voidshowi(){cout<
intGeti(){returni;}
};
classDerived:
publicBase
{
intj;
Baseaa;
public:
Derived(intn,intm,intp):
Base(m),aa(p)
{
cout<<"Constructingderivedclass"<j=n;
}
~Derived()
{cout<<"Destructingderivedclass"<voidshow()
{
Base:
:
showi();
cout<}
};
voidmain()
{
Derivedobj(8,13,24);
obj.show();
}
2.阅读下面的代码,若无错误,请写出运行结果。
(1)
解:
classA
classB
classC
classD
Pressanykeytocontinue
#include
classA
{
public:
A(char*s){cout<
~A(){}
};
classB:
virtualpublicA
{
public:
B(char*s1,char*s2):
A(s1){cout<};
classC:
virtualpublicA
{
public:
C(char*s1,char*s2):
A(s1)
{
cout<}
};
classD:
publicB,publicC
{
public:
D(char*s1,char*s2,char*s3,char*s4):
B(s1,s2),C(s1,s3),A(s1)
{
cout<}
};
voidmain()
{
D*p=newD("classA","classB","classC","classD");
deletep;
}
(2)
解:
DisplayderivedclassobjectA:
x=0
x=1
x=2
DisplaybaseclassobjectB:
x=1
Pressanykeytocontinue
#include
classparent
{
inti;
protected:
intx;
public:
parent(){x=0;i=0;}
voidchange(){x++;i++;}
voiddisplay();
};
classson:
publicparent
{
public:
voidmodify();
};
voidparent:
:
display(){cout<<"x="<voidson:
:
modify(){x++;}
voidmain()
{
sonA;parentB;
cout<<"DisplayderivedclassobjectA:
\n";
A.display();
A.change();
A.display();
A.modify();
A.display();
cout<<"DisplaybaseclassobjectB:
\n";
B.change();
B.display();
}
(3)#include
classbase
{
public:
voidshow(){cout<<"classbaseshow()iscalled.\n";}
};
classderived:
publicbase
{
public:
voidshow(){cout<<"classderivedshow()iscalled.\n";}
解:
classbaseshow()iscalled.
classderivedshow()iscalled.
classbaseshow()iscalled.
Pressanykeytocontinue
};
voidmain()
{
basedemo1;
deriveddemo2;
demo1.show();
demo2.show();
demo2.base:
:
show();
}
(4)#include
classB1
{
public:
intnV;
voidfun(){cout<<"MemberofB1"<};
classB2
{
public:
intnV;
voidfun(){cout<<"MemberofB2"<};
classD1:
publicB1,publicB2
{
public:
intnV;
voidfun()
{
cout<<"MemberofD1"<}
};
voidmain()
解:
MemberofD1
MemberofB1
MemberofB2
Pressanykeytocontinue
{
D1d1;
d1.nV=1;
d1.fun();
d1.B1:
:
nV=2;
d1.B1:
:
fun();
d1.B2:
:
nV=3