设计一个完整的程序并完成测试程序的正确性.docx

上传人:b****8 文档编号:10234409 上传时间:2023-02-09 格式:DOCX 页数:23 大小:130.57KB
下载 相关 举报
设计一个完整的程序并完成测试程序的正确性.docx_第1页
第1页 / 共23页
设计一个完整的程序并完成测试程序的正确性.docx_第2页
第2页 / 共23页
设计一个完整的程序并完成测试程序的正确性.docx_第3页
第3页 / 共23页
设计一个完整的程序并完成测试程序的正确性.docx_第4页
第4页 / 共23页
设计一个完整的程序并完成测试程序的正确性.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

设计一个完整的程序并完成测试程序的正确性.docx

《设计一个完整的程序并完成测试程序的正确性.docx》由会员分享,可在线阅读,更多相关《设计一个完整的程序并完成测试程序的正确性.docx(23页珍藏版)》请在冰豆网上搜索。

设计一个完整的程序并完成测试程序的正确性.docx

设计一个完整的程序并完成测试程序的正确性

实验七继承与派生

(2)

一、实验目的和要求

1.学习定义和使用类的继承关系,定义派生类;

2.掌握类派生,类的成员访问权限,派生类中构造和析构的次序;

3.熟悉不同继承方式下对基类成员的访问控制;

4.掌握初始化基类成员的方法;

5.掌握多重继承和派生类的方法;

二、实验内容和结果

1.设计一个描述儿童、成人和老人的类,儿童分为学龄前和学龄期儿童,成人有工作,老人已退休。

提取共性作为基类,并派生出满足要求的各个类及每一个类上的操作。

设计一个完整的程序,并完成测试程序的正确性。

解:

描述一个人的基本特性包括:

姓名,出生日期,出生地。

把这些基本特性定义为一个基类Base。

不论学龄前还是学龄期儿童都要有监护人。

为此,在类Base的基础上派生出类AllChil,再把类AllChil作为基类派出学龄前和学龄期儿童的类。

学龄前类由幼儿园情况信息,包括设置幼儿园函数和获取幼儿园信息函数,输出有关信息。

学龄期儿童类有学校和学号信息,包括包括设置学校和学号函数和获取学校和学号信息函数,输出有关信息。

把类Base作为基类,分别派生出成人类和老人类。

一个供参考的部分程序为:

#include

#include

classBase

{

charName[14];//姓名

intYear,Month,Day;//分别存放出生年、月、日

charBithPlace[30];//出生地

public:

Base(char*n,inty,intm,intd,char*bp);

Base();

voidSetDate(int,int,int);//设置出生年、月、日

voidSetName(char*);//设置姓名

voidSetBithPlace(char*);//设置出生地

voidGetDate(int*,int*,int*);//获取出生年、月、日

voidGetName(char*);//获取姓名

voidGetBithPlace(char*);//获取出生地

voidPrintBase();//输出有关信息

};

AllChil有监护人,设置监护人函数和获取监护人函数,输出有关信息

成人类(Men)有单位,工资,电话。

函数有读取单位,工资,电话信息。

设置单位,工资,电话。

输出有关信息;

老人类(OldMen):

退休工资,业余爱好。

函数有读取工资,爱好信息。

设置及输出相关信息。

#include

#include

usingnamespacestd;

classBase

{

stringName;//姓名

intYear,Mouth,Day;//分别存放出生年、月、日

stringBithPlace;//出生地

public:

Base(stringn,inty,intm,intd,stringbp);

Base();

voidSetDate(int,int,int);//设置出生年、月、日

voidSetName(string);//设置姓名

voidSetBithPlace(string);//设置出生地

voidGetDate(int*,int*,int*);//获取出生年、月、日

stringGetName();//获取姓名

stringGetBithPlace();//获取出生地

voidPrintBase();//输出有关信息

};

Base:

:

Base(stringn,inty,intm,intd,stringbp)

{

Name=n;

Year=y;

Mouth=m;

Day=d;

BithPlace=bp;

}

voidBase:

:

SetDate(inta,intb,intc)//设置出生年、月、日

{

Year=a;

Mouth=b;

Day=c;

}

voidBase:

:

SetName(stringnam)//设置姓名

{

Name=nam;

}

voidBase:

:

SetBithPlace(stringbp)//设置出生地

{

BithPlace=bp;

}

stringBase:

:

GetName()//获取姓名

{

returnName;

}

stringBase:

:

GetBithPlace()//获取出生地

{

returnBithPlace;

}

voidBase:

:

PrintBase()

{

cout<<"Name:

"<

cout<<"Year,Month,Day:

"<

cout<<"BithPlace:

"<

}

voidBase:

:

GetDate(int*y,int*m,int*d)

{

Year=*y;

Mouth=*m;

Day=*d;

}

classAllChil:

publicBase//AllChil类

{

protected:

stringjhr;

public:

voidSet_jhr(stringj)//设置监护人

{

jhr=j;

}

stringGet_jhr()//获取监护人

{

returnjhr;

}

AllChil(stringn,inty,intm,intd,stringbp,stringk):

Base(n,y,m,d,bp)

{

jhr=k;

}

voidPrint_jhr()//输出有关信息

{

PrintBase();

cout<<"jianhuren:

"<

}

};

classxueqian:

publicAllChil//学龄前类

{

protected:

stringschool_name;

public:

xueqian(stringn,inty,intm,intd,stringbp,stringk,stringch):

AllChil(n,y,m,d,bp,k)

{school_name=ch;}

voidSet_child(stringc)//设置校名

{

school_name=c;

}

stringGet_child()//获取校名

{

returnschool_name;

}

voidPrint_SchoolName()//输出有关信息

{

Print_jhr();

cout<<"school_name:

"<

}

};

classxueqi:

publicAllChil//学龄期儿童的类

{

protected:

intnum;

stringschool_addr;

public:

xueqi(stringn,inty,intm,intd,stringbp,stringk,stringne,intnu):

AllChil(n,y,m,d,bp,k)

{

school_addr=ne;

num=nu;

}

voidSet_school_addr(stringca)//设置学校地址

{

school_addr=ca;

}

stringGet_school_addr()//获取学校地址

{

returnschool_addr;

}

voidSet_num(intcb)//设置学号

{

num=cb;

}

intGet_num()//获取学号

{

returnnum;

}

voidPrint_1()//输出有关信息

{

Print_jhr();

cout<<"num:

"<

cout<<"schooladdr:

"<

}

};

classMen:

publicBase

{

protected:

stringunit;//单位

floatsalary;//工资

inttel;//电话

public:

Men(stringn,inty,intm,intd,stringbp,stringdw,floats,intte):

Base(n,y,m,d,bp)

{unit=dw;

salary=s;

tel=te;

}

voidSet_unit(stringdw)//设置单位

{

unit=dw;

}

stringGet_unit()//获取单位

{

returnunit;

}

voidSet_salary(floats)//设置工资

{

salary=s;

}

floatGet_salary()//获取工资

{

returnsalary;

}

voidSet_tel(intte)//设置电话

{tel=te;}

intGet_tel()//获取电话

{

returntel;

}

voidPrintMen()//输出有关信息

{

PrintBase();

cout<<"unit:

"<

cout<<"salary:

"<

cout<<"tel:

"<

}

};

classOldMen:

publicBase//老人类

{

protected:

floatsalary;

stringhobby;

public:

OldMen(stringn,inty,intm,intd,stringbp,stringh,floats):

Base(n,y,m,d,bp)

{

salary=s;

hobby=h;

}

voidSet_salary(floats)//设置工资

{

salary=s;

}

floatGet_salary()//获取工资

{

returnsalary;

}

voidSet_hobby(stringh)//设置爱好

{

hobby=h;

}

stringGet_hobby()//获取爱好

{

returnhobby;

}

voidPrintOldMen()//输出有关信息

{

PrintBase();

cout<<"salary:

"<

cout<<"hobby:

"<

}

};

intmain()

{

AllChilm1("儿童",2008,12,1,"天津","tim");

m1.Print_jhr();

cout<

Menm2("父母",1980,6,8,"天津","天津城建学院",4000,10010);

m2.PrintMen();

OldMenm3("老人",1950,3,2,"天津","reading",3000);

m3.PrintOldMen();

xueqianm4("学龄前儿童",2000,2,2,"天津","weiu","***");

m4.Set_child("天津城建");

m4.Print_SchoolName();

xueqim5("学龄期儿童",2000,2,8,"天津","uwer","+++",7777);

cout<<"修改前:

"<

m5.Print_1();

m5.Set_num(10010);

m5.Set_school_addr("西青区");

cout<<"修改后:

"<

m5.Print_1();

cout<<"获得school_addr:

";

cout<

return0;

}

2.习题9

#include

#include

usingnamespacestd;

classTeacher

{protected:

stringname;

intage;

charsex;

stringaddr;

inttel;

stringtitle;

public:

Teacher(string,int,char,string,int,string);

voiddisplay();

};

voidTeacher:

:

display()

{

cout<<"name:

"<

cout<<"age:

"<

cout<<"sex:

"<

cout<<"addr:

"<

cout<<"tel:

"<

cout<<"title:

"<

}

Teacher:

:

Teacher(stringnam,inta,chars,stringadd,intte,stringtit)

{

name=nam;

age=a;

sex=s;

addr=add;

tel=te;

title=tit;

}

classCadre

{

protected:

stringname;

intage;

charsex;

stringaddr;

inttel;

stringpost;

public:

Cadre(string,int,char,string,int,string);

voiddisplay();

};

voidCadre:

:

display()

{

cout<<"name:

"<

cout<<"age:

"<

cout<<"sex:

"<

cout<<"addr:

"<

cout<<"tel:

"<

cout<<"post:

"<

}

Cadre:

:

Cadre(stringnam,inta,chars,stringadd,intte,stringp)

{

name=nam;

age=a;

sex=s;

addr=add;

tel=te;

post=p;

}

classTeacher_Cadre:

publicTeacher,publicCadre

{

public:

Teacher_Cadre(stringnam,inta,chars,string

add,intte,stringtit,stringp,floatw);

voidshow();

protected:

floatwages;

};

Teacher_Cadre:

:

Teacher_Cadre(stringnam,inta,chars,stringadd,intte,stringtit,stringp,floatw):

Teacher(nam,a,s,add,te,tit),Cadre(nam,a,s,add,te,p),wages(w){}

voidTeacher_Cadre:

:

show()

{

Teacher:

:

display();

cout<<"post:

"<

cout<<"wages:

"<

}

intmain()

{

Teacher_Cadred

("路江飞",20,'m',"tianjin",10086,"***","stu",5000);

d.show();

return0;

}

运行结果

3.公司雇员。

对于一个公司的雇员来说,无非三种:

普通雇员、管理人员和主管。

这些雇员有共同的数据:

名字、每小时的工资,也有一些共同的操作:

数据成员初始化、读雇员的数据成员及计算雇员的工资。

但是,他们也有不同。

例如,管理人员除有这些共同的特征外,有可能付固定薪水,主管除有管理人员的共同特征外,还有其它物质奖励等。

三种雇员中,管理人员可以看作普通雇员的一种,而主管又可以看作管理人员的一种。

我们很容易想到使用类继承来实现这个问题:

普通雇员作为基类,管理人员类从普通雇员类派生,而主管人员类又从管理人员类派生。

他们之间的关系如下图所示:

Employee

|

Manager

|

Supervior

#include

usingnamespacestd;

classEmployee

{

public:

Employee(char*theName,floatthePayRate);

char*getName()const;

floatgetPayRate()const;

floatpay(floathoursWorked)const;//计算工资

protected:

char*name;//雇员名称

floatpayRate;//薪水等级

};

完成Employee类的成员函数的定义。

classManager:

publicEmployee

{

public:

//isSalaried//付薪方式:

true付薪固定工资,false按小时付薪

Manager(char*theName,floatthePayRate,boolisSalaried,floatrw,);

boolgetSalaried()const;

floatpay(floathoursWorked)const;

protected:

boolsalaried;

};

完成Manager类的成员函数的定义。

classSupervisor:

publicManager

{

public:

Supervisor(char*theName,floatthePayRate,boolisSalaried,floatrw,floattheBouns);

floatgetBouns()const;

floatpay(floathoursWorked)const;

protected:

floatbouns;

};

完成Supervisor类的成员函数的定义。

完成main函数,为三个类分别定义三个对象,输出三个对象的工资信息。

#include

#include

usingnamespacestd;

classEmployee

{

public:

Employee(stringtheName,floatthePayRate);

stringgetName()const;

floatgetPayRate()const;

floatpay(floathoursWorked)const;//计算工资

protected:

stringname;//雇员名称

floatPayRate;//薪水等级

};

stringEmployee:

:

getName()const

{

returnname;

}

floatEmployee:

:

getPayRate()const

{

returnPayRate;

}

Employee:

:

Employee(stringtheName,floatthePayRate)

{

name=theName;

PayRate=thePayRate;

}

floatEmployee:

:

pay(floathoursWorked)const

{

returnhoursWorked*PayRate;

}

classManager:

publicEmployee//Manager

{

public:

//isSalaried//付薪方式:

true付薪固定工资,false按小时付薪

Manager(stringtheName,floatthePayRate,boolisSalaried);

boolgetSalaried()const;

floatpay(floathoursWorked)const;

protected:

boolsalaried;

};

Manager:

:

Manager(stringtheName,floatthePayRate,boolisSalaried)

:

Employee(theName,thePayRate)

{

salaried=isSalaried;

}

boolManager:

:

getSalaried()const

{

returnsalaried;

}

floatManager:

:

pay(floathoursWorked)const

{

if(salaried)

returnPayRate;

else

returnEmployee:

:

pay(hoursWorked);

}

classSupervisor:

publicManager//Supervisor

{

public:

Supervisor(stringtheName,floatthePayRate,boolisSalaried,floattheBouns);

floatgetBouns()const;

floatpay(floathoursWorked)const;

protected:

floatbouns;

};

Supervisor:

:

Supervisor(stringtheName,floatthePayRate,boolisSalaried,floattheBouns):

Manage

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

当前位置:首页 > 自然科学 > 天文地理

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

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