实验六继承与派生Word格式文档下载.docx
《实验六继承与派生Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验六继承与派生Word格式文档下载.docx(26页珍藏版)》请在冰豆网上搜索。
char*buf;
};
voidfun(A*a)
Mayyousucceed!
endl;
deletea;
intmain()
{
A*a=newB(15);
fun(a);
return0;
1、
(1)程序运行结果:
A()called.
B()called.
~B()called.
~A()called.
(2)
#include<
classA{
public:
A(inta,intb):
x(a),y(b){cout<
Aconstructor..."
voidAdd(inta,intb){x+=a;
y+=b;
voiddisplay(){cout<
("
x<
"
y<
)"
~A(){cout<
destructorA..."
private:
intx,y;
classB:
privateA{
inti,j;
AAobj;
B(inta,intb,intc,intd):
A(a,b),i(c),j(d),Aobj(1,1){cout<
Bconstructor..."
voidAdd(intx1,inty1,intx2,inty2)
A:
Add(x1,y1);
i+=x2;
j+=y2;
voiddisplay(){
display();
Aobj.display();
cout<
i<
j<
~B(){cout<
destructorB..."
}
intmain()
{
Bb(1,2,3,4);
b.display();
b.Add(1,3,5,7);
(2)程序运行结果:
Aconstructor...
Bconstructor...
(1,2)(1,1)(3,4)
(2,5)(1,1)(8,11)
destructorB...
destructorA...
(3)
A(inta):
x(a){cout<
intf(){return++x;
intx;
publicvirtualA{
inty;
B(inta,intb,intc):
A(a),y(c),Aobj(c){cout<
intf(){
f();
Aobj.f();
return++y;
f()<
\t"
Aobj.f()<
classC:
publicB{
C(inta,intb,intc):
B(a,b,c),A(0){cout<
Cconstructor..."
classD:
publicC,publicvirtualA{
D(inta,intb,intc):
C(a,b,c),A(c){cout<
Dconstructor..."
~D(){cout<
destructorD..."
Dd(7,8,9);
d.f();
d.display();
return0;
(3)程序运行结果:
Aconstructor...9
Bconstructor...9
Cconstructor...
Dconstructor...
121211
destructorD...
(4)
classBase1
public:
Base1()
classBase1!
classBase2
Base2()
classBase2!
classLevel1:
publicBase2,virtualpublicBase1
Level1()
classLevel1!
classLevel2:
publicBase2,virtualpublicBase1
Level2()
classLevel2!
classTopLevel:
publicLevel1,virtualpublicLevel2
TopLevel()
classTopLevel!
TopLevelobj;
(4)程序运行结果:
classBase12
classLeve12!
classLeve11!
classTopLeve1!
2.某出版系统发行图书和磁带,利用继承设计管理出版物的类。
要求如下:
建立一个基类Publication存储出版物的标题title、出版物名称name、单价price及出版日期date。
用Book类和Tape类分别管理图书和磁带,它们都从Publication类派生。
Book类具有保存图书页数的数据成员page,Tape类具有保存播放时间的数据成员playtime。
每个类都有构造函数、析构函数,且都有用于从键盘获取数据的成员函数inputData(),用于显示数据的成员函数display()。
2、
string>
classDate
Date(){}
Date(inty,intm,intd);
Date(Date&
d);
voidSetDate(inty,intm,intd);
voidShowDate();
intyear,month,day;
Date:
Date(inty,intm,intd){year=y;
month=m;
day=d;
Date(Date&
d){year=d.year;
month=d.month;
day=d.day;
voidDate:
SetDate(inty,intm,intd)
{year=y;
ShowDate()
{cout<
year<
年"
month<
月"
day<
日"
classTime
Time(){}
Time(inth,intm,ints);
Time(Time&
t);
voidSetTime(inth,intm,ints);
voidShowTime();
inthour,minute,second;
Time:
Time(inth,intm,ints){hour=h;
minute=m;
second=s;
Time(Time&
t){hour=t.hour;
minute=t.minute;
second=t.second;
voidTime:
SetTime(inth,intm,ints){hour=h;
ShowTime(){cout<
hour<
minute<
second<
classPublication
Publication(){}
Publication(stringtitle,stringname,floatprice,inty,intm,intd);
voidinputData();
voiddisplay();
stringtitle;
stringname;
floatprice;
Datedate;
Publication:
Publication(stringtitle,stringname,floatprice,inty,intm,intd)
title(title),name(name),price(price),date(y,m,d){}
voidPublication:
inputData()
Pleaseinputtitle,name,price,publicationdateofabook:
cin>
>
title>
name>
price;
year>
month>
day;
date.SetDate(year,month,day);
display()
title="
title<
name="
name<
price="
price<
date="
date.ShowDate();
classBook:
publicPublication
Book(){}
Book(stringtitle,stringname,floatprice,inty,intm,intd,intpage);
intpage;
Book:
Book(stringtitle,stringname,floatprice,inty,intm,intd,intpage)
Publication(title,name,price,y,m,d){this->
page=page;
voidBook:
{Publication:
inputData();
Pleasethepagesofthebook:
page;
page="
page<
classTape:
Tape(){}
Tape(stringtitle,stringname,floatprice,inty,intm,intd,Timeplaytime);
Timeplaytime;
Tape:
Tape(stringtitle,stringname,floatprice,inty,intm,intd,Timeplaytime)
Publication(title,name,price,y,m,d),playtime(playtime){}
voidTape:
Pleasetheplaytimeofthetape:
hour>
minute>
second;
playtime.SetTime(hour,minute,second);
playtime="
playtime.ShowTime();
{Bookbook1("
教材"
C++程序设计"
30.00,2009,6,1,300);
book1.display();
Timetime1(30,10,20);
Tapetape1("
磁带"
C++程序设计视频"
10.00,2009,8,1,time1);
tape1.display();
Bookbook2;
book2.inputData();
book2.display();
Tapetape2;
tape2.inputData();
tape2.display();
3.分别定义教师类Teacher和干部类Cadre,采用多重继承的方式由这两个类派生出新类Teacher_Cadre(教师兼干部类)。
要求:
(1)在两个基类中都包含姓名、年龄、性别、地址、电话数据成员。
(2)在Teacher类中还包含数据成员职称title,在Cadre类中还包含数据成员职务post,在Teacher_Cadre类中还包含数据成员工资wage。
(3)对两个基类中的姓名、年龄、性别、地址、电话数据成员用相同的名字,在访问这类数据成员时,指定作用域。
(4)在类体中声明成员函数,在类外定义成员函数。
(5)在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、地址、电话,然后再用cout语句输出职务和工资。
3、
classTeacher
Teacher(stringnam,inta,chars,stringtit,stringad,stringt);
protected:
intage;
charsex;
stringaddr;
stringtel;
Teacher:
Teacher(stringnam,inta,chars,stringtit,stringad,stringt):
name(nam),age(a),sex(s),title(tit),addr(ad),tel(t){}
voidTeacher:
{cout<
name:
age"
age<
sex:
sex<
title:
address:
addr<
tel:
tel<
classCadre
Cadre(stringnam,inta,chars,stringp,stringad,stringt);
stringpost;
Cadre:
Cadre(stringnam,inta,chars,stringp,stringad,stringt):
name(nam),age(a),sex(s),post(p),addr(ad),tel(t){}
voidCadre:
age:
post:
post<
classTeacher_Cadre:
publicTeacher,publicCadre
Teacher_Cadre(stringnam,inta,chars,stringtit,stringp,stringad,stringt,floatw);
voidshow();
floatwage;
Teacher_Cadre:
Teacher_Cadre(stringnam,inta,chars,stringt,stringp,stringad,stringtel,floatw):
Teacher(nam,a,s,t,ad,tel),Cadre(nam,a,s,p,ad,tel),wage(w){}
voidTeacher_Cadre:
show()
{Teacher:
wages:
wage<
intmain()
{Teacher_Cadrete_ca("
Wang-li"
50,'
f'
prof."
president"
135BeijingRoad,Shanghai"
(021)61234567"
1534.5);
te_ca.show();
4.按下列要求编写程序。
(1)定义一个分数类Score。
它有
3个数据成员:
Chinese//语文课成绩
English//英语课成绩
Mathematics//数学课成绩
2个构造函数:
无参的和带参数的
3个成员函数:
是否带参数根据需要自定
sum()//计算三门课总成绩
print()//输出三门课成绩和总成绩
modify()//修改三门课成绩
(2)定义一个学生类Student。
Num//学号
Name//姓名
MyScore//成绩
sum()//计算某学生三门课总成绩
print()//输出某学生学号、姓名和成绩
modify()//修改某学生学号、姓名和成绩
(3)在主函数中,先定义一个学生类对象数组,再通过for循环给对象数组赋上实际值,最后输出对象数组个元素的值。
4、
classscore
score()
chinese=0;
english=0;
mathematics=0;
score(floatch,floaten,floatma):
chinese(ch),english(en),mathematics(ma){}
floatsum();
voidprint();
voidmodify();
floatchinese;
floatenglish;
floatmathematics;
classstudent
student():
myscore(0,0,0)
{
num="
000000000"
name="
无"
student(stringn,stringna,floatm,floatc,floate):
num(n),name(na),myscore(m,c,e){}
floatsum();
voidprint();
voidmodify();
stringnum;
stri