实验六继承三 2文档格式.docx

上传人:b****6 文档编号:20089655 上传时间:2023-01-16 格式:DOCX 页数:16 大小:19.43KB
下载 相关 举报
实验六继承三 2文档格式.docx_第1页
第1页 / 共16页
实验六继承三 2文档格式.docx_第2页
第2页 / 共16页
实验六继承三 2文档格式.docx_第3页
第3页 / 共16页
实验六继承三 2文档格式.docx_第4页
第4页 / 共16页
实验六继承三 2文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

实验六继承三 2文档格式.docx

《实验六继承三 2文档格式.docx》由会员分享,可在线阅读,更多相关《实验六继承三 2文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

实验六继承三 2文档格式.docx

public:

X(inta=0){x=a;

}//基类X的构造函数

voidset_x(inta){x=a;

}

voidshow(void)

{cout<

<

"

x="

x;

};

classY

{inty;

Y(intb=0){y=b;

}//基类Y的构造函数

voidset_y(intb){y=b;

y="

y;

classZ:

publicX,publicY

//classZ:

publicX,privateY

{intz;

Z(inta=0,intb=0,intc=0):

X(a),Y(b)

{z=c;

}//派生类Z的构造函数

voidset_xyz(inta,intb,intc)

{set_x(a);

set_y(b);

z=c;

voidshow_z(void)

z="

z;

voidprint(void)

{show();

//显示x的值

show();

//显示y的值

show_z();

//显示z的值

}

voidmain()

{Zobj1(3,4,5),obj2;

obj2.set_xyz(10,20,30);

obj1.print();

cout<

endl;

obj2.print();

问题:

⑴编译该程序,会出现编译错误,其原因是在定义Z类的print()成员函数中的show()函数调用时出现了。

解决的方法是:

⑵将“show();

//显示x的值”中的“show()”改为

⑶将“show();

//显示y的值”中的“show()”改为

⑷调试成功后的输出结果是:

 

⑸成员函数voidset_xyz(inta,intb,intc)中“set_x(a)”的作用是,“set_y(b)”的作用是。

程序2(exp_602.cpp)

classbase

{private:

inta;

public:

base(intx)

{a=x;

cout<

Constructingbasea="

a<

classbase1:

publicbase

intb;

base1(intx1,intx2):

base(x1)

{b=x2;

Constructingbase1b="

b<

classbase2:

intc;

base2(intx1,intx2):

{c=x2;

Constructingbase2c="

c<

classderived:

publicbase1,publicbase2

intd;

derived(intx1,intx2,intx3,intx4):

base1(x1,x2),base2(x1,x3)

{d=x4;

Constructingderivedd="

d<

voidmain(void)

{derivedobj(2,3,4,5);

⑹编译运行程序的输出结果是:

⑺从输出结果中可看出,间接基类“base”被调用了两次,产生原因是“derived”的两个直接基类“base1”、“base2”拥有共同基类“base”,产生了。

⑻将程序中“classbase1:

publicbase”改为“classbase1:

virtualpublicbase”

“classbase2:

publicbase”改为“classbase2:

“derived(intx1,intx2,intx3,intx4):

base1(x1,x2),base2(x1,x3)”改为

base(x1),base1(x1,x2),base2(x1,x3)”

重新编译运行程序的输出结果是:

⑼“virtualpublicbase”表示间接基类“base”为。

㈡知识应用实验

按要求调试程序(完善类的定义及主程序)。

1.题目:

通过继承方式处理学生成绩。

2.内容

⑴类的定义:

人“person”类(person.h中定义):

包括姓名、性别、出生日期(日期“date”本身是一个类,包括年、月、日三个成员——定义在date.h中)三个数据成员;

学生“student”类(student.h中定义),公有继承person类,新增学号、系、进校时间(date对象)三个数据成员;

成绩score类(score.h中定义):

新增课程科数、成绩数组数据成员。

⑵成绩处理:

源程序存放在“exp_603.cpp”中。

3.要求

⑴完善类的定义;

⑵程序调试办法:

每建好一个类,均在main()函数中进行测试成功后再定义下一个类,测试程序以“exp_test.cpp”存盘;

⑶所有类定义测试后再调试、完善成绩处理程序。

程序:

//测试程序exp_test.cpp

iomanip.h>

#include"

"

//用不同类头文件

voidmain()

{……}

//各个类的定义

//date类的定义:

存放在date.h中

classdate

intyear,month,day;

//年、月、日三个私有成员

date(void)

{year=1980;

month=1;

day=1;

voidset_date(inty,intm,intd)

{}//完成成员函数的定义

intget_year(void)

intget_month(void)

intget_day(void)

//person类的定义:

保存在person.h中

string.h>

date.h"

classperson

{protected:

charname[11];

charsex[2];

datebirthday;

person(void);

//无参构造函数

voidset_person(char*na,char*s,inty,intm,intd);

char*get_name(void)

char*get_sex(void)

{returnbirthday.get_month();

voidprint(void);

person:

:

person(void)//无参构造函数

{strcpy(name,"

无名氏"

);

strcpy(sex,"

男"

birthday.set_date(1980,1,1);

voidperson:

set_person(char*na,char*s,inty,intm,intd)

{}//完成成员函数的定义

print(void)

{cout<

姓名:

name<

性别:

sex<

出生日期:

birthday.get_year()<

年"

;

birthday.get_month()<

月"

birthday.get_day()<

日"

//student类的定义:

存放在student.h中

person.h"

classstudent:

publicperson

{public:

intid;

chardepartment[20];

dateenterdate;

student(void);

voidset_student(intn,char*s,inty,intm,intd);

intget_id(void)

char*get_department(void)

intget_enteryear(void)

intget_entermonth(void)

intget_enterday(void)

voidprint_base();

student:

student(void)

id=0;

strcpy(department,"

计算机"

enterdate.set_date(2000,9,1);

voidstudent:

set_student(intn,char*s,inty,intm,intd)

//n、s、y、m、d分别为id、department、enterdate提供值

学号:

id<

person:

print();

cout<

系(专业):

department<

进校日期:

enterdate.get_year()<

enterdate.get_month()<

enterdate.get_day()<

print_base()

setw(8)<

get_id();

setw(12)<

get_name();

setw(4)<

get_sex();

setw(6)<

get_year()<

-"

get_month()<

get_day();

setw(20)<

get_department();

get_enteryear()<

get_entermonth();

get_enterday()<

//score类的定义:

存放在score.h中

student.h"

constintM=10;

classscore:

publicstudent

floatsc[M],aver;

intm;

score(void);

voidset_score(floatx[],intn);

//提供成绩

floatget_score(inti)//得到第i科成绩

floatget_aver(void)//得到平均成绩

voidprint_score(void);

score:

score(void)//无参构造函数

{

strcpy(name,"

inti;

m=M;

for(i=0;

i<

m;

i++)

sc[i]=0;

aver=0;

voidscore:

set_score(floatx[],intn)//提供成绩:

完成成员函数的定义

{inti;

floatsum=0;

m=n;

{}

aver=sum/m;

print(void)//重载输出print()

{student:

sc[i];

aver<

print_score(void)

{intj;

for(j=0;

j<

j++)

get_score(j);

get_aver()<

//成绩处理程序:

保存在exp_603.cpp中

score.h"

voidinput_base(score*p,intn);

//学生基本数据输入

voidinput_score(score*p,intn,intm);

//学生成绩输入

voidprint_base(score*p,intn);

//学生基本数据输出

voidprint_score(score*p,intn,intm);

//学生成绩输出

score&

average(score*p,intn,intm);

//普通函数:

平均成绩计算

voidsort(score*p,intn,intm);

//普通函数:

按平均成绩排序

{intn,m;

学生人数:

cin>

>

n;

考试科数:

cin>

score*p,aver;

p=newscore[n];

//动态分配内存单元——动态数组

if(p==NULL)

{cout<

内存分配失败"

return;

intch;

do

{

\n\n请选择:

\n"

1.输入学生基本数据\n"

2.输入学生成绩\n"

3.计算课程平均成绩\n"

4.输出学生基本数据\n"

5.输出学生成绩\n"

6.按平均成绩排序\n"

0.退出\n"

\n输入你的选择:

cin>

ch;

switch(ch)

{case1:

input_base(p,n);

break;

case2:

input_score(p,n,m);

case3:

aver=average(p,n,m);

case4:

print_base(p,n);

case5:

print_score(p,n,m);

aver.print_score();

case6:

sort(p,n,m);

case0:

break;

while(ch);

delete[]p;

//释放内存

voidinput_base(score*p,intn)//学生基本数据输入

{inti,id,y1,m1,d1,y2,m2,d2;

charname[11],sex[3],dpt[20];

\n请输入学生基本数据:

第"

i+1<

个学生:

id;

name;

sex;

出生年:

y1;

出生月:

m1;

出生日:

d1;

所在系:

dpt;

入学年:

y2;

入学月:

m2;

入学日:

d2;

p[i].set_person();

//完成函数的调用

p[i].set_student();

voidinput_score(score*p,intn,intm)

{inti,j;

floatx[M];

p[i].get_id()<

p[i].get_name()<

的成绩:

j+1<

科成绩:

x[j];

p[i].set_score();

voidprint_base(score*p,intn)

p[i].print_base();

voidprint_score(score*p,intn,intm)

p[i].print_score();

average(score*p,intn,intm)//用返回引用的方法

floats[M]={0};

staticscoreaver;

//返回的对象必须是静态的

{for(i=0;

s[j]=s[j]+p[i].get_score(j);

s[j]=s[j]/n;

aver.set_person("

平均成绩"

"

0,0,0);

aver.set_score();

returnaver;

voidsort(score*p,intn,intm)//选择法排序:

完成空白处的内容

{scoret;

floata;

inti,j,k;

n-1;

{a=p[i].get_aver();

k=i;

for(j=i+1;

if()

{a=p[j].get_aver();

k=j;

{t=p[i];

p[i]=p[k];

p[k]=t;

㈢程序设计实验

编程对日期时间型数据进行处理。

要求:

1、定义日期型“Date”类,保存在“date.h”中(成员函数包括日期赋初值,设置日期,读取年、月、日,显示年、月、日及判断是否闰年等)。

2、定义时间型“Time”类,保存在“Time.h”中(与实验一中的类相同)。

3、定义日期时间型“DateTime”类保存在“datetime.h”中:

⑴公有继承Date类及Time类;

⑵不增加数据成员;

⑶增加日期时间处理成员函数,包括初始化日期时间、设置日期时间、显示日期时间等。

4、编写main()函数保存在“exp_603.cpp”中,内容自定。

五、实验收获与创新

1.自己拟定一个解决实际问题的题目,综合应用实验一至实验六的知识编程实现。

2.通过实验四、实验五、实验六,谈谈你对面向对象程序设计继承的认识。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1