实验2类的继承与派生报告图形类设计与员工管理Word文档格式.docx
《实验2类的继承与派生报告图形类设计与员工管理Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验2类的继承与派生报告图形类设计与员工管理Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
要求:
(1)Cirlce类基本信息:
圆心坐标、半径;
Rectangle类基本信息:
长、宽;
Triangle类基本信息:
三个顶点坐标;
其中:
成员变量为private属性,成员函数为public属性;
(2)每个图形类有多个构造函数:
缺省构造函数、带参数的构造函数;
(3)每个图形类有计算图形的面积GetArea(),显示图形的基本信息函数Show(),修改基本信息的函数Set(形参)。
6[实验提示]
(1)在派生类的构造函数中,应注意对基类数据成员的初始化;
(2)各类图形面积的计算方法不同,因此不能在基类Shape中统一确定计算的方法。
在基类Shape中实现计算面积功能的函数体GetArea()应为空,在派生类中根据同名覆盖原则定义各自的同名函数实现具体功能。
[测试数据]Circle:
圆心(30,45)半径:
35圆心(50,89)半径:
23Rectangle:
长:
30宽:
53长:
28宽:
24Triangle:
顶点:
(34,45)、(89,45)、(54,67)顶点:
(22,34)、(67,43)、(86,64)
2.员工管理
某小型公司有四类人员:
总经理、技术人员、销售经理、推销员。
设计一个基类employee,派生出manager(总经理)、technician(技术人员)、salesmanager(销售经理)、saleman(推销员)。
销售经理既是经理又是销售人员,兼具两类人员的特点,因此同时继承manager和salesman两个类。
(1)类定义1)employee类:
基本信息:
编号、姓名、性别、出生日期、职位、薪水等;
出生日期使用自定义的Date(日期)类;
基本信息为private属性,成员函数为public属性;
多个构造函数:
缺省构造函数、带参数的构造函数、带默认参数的构造函数;
72)Date类:
成员变量:
年、月、日成员函数:
SetYear(intyear)、SetMonth(intmonth)、SetDay(intday)GetYear()、GetMonth()、GetDay()3)派生类technician:
新增属性:
工作时间派生类saleman:
新增属性:
销售额、所属部门
(2)实现人员信息的录入,用成员函数display()显示员工信息;
(3)计算并显示个人月薪,用成员函数pay()计算不同员工的薪水:
月薪计算办法:
总经理拿固定月薪8000元,技术人员按每小时25元领取月薪;
推销员的月薪按当月销售额的4%提成;
销售经理固定月薪5000元加所管辖部门当月销售总额的5‰。
[实验提示]
(1)在基类中,除了定义构造函数和析构函数,还应统一定义对各类人员信息应有的操作,规范类族中各派生类的基本行为,但是各类人员的月薪计算方法不同,不能在基类employee中统一确定计算方法。
各类人员信息的显示内容不同,同样不能在基类employee中统一确定显示方法。
在基类中实现上述功能的函数体应为空,在派生类中根据同名覆盖原则定义各自的同名函数实现具体功能。
2、将基类employee分成两个独立文档:
employee.h(类声明头文件)和employy.cpp(类实现文件)3、“职位”的类型设定为int;
三、实验结果和数据处理
1图形类设计
#include<
iostream>
cmath>
usingnamespacestd;
classShape
{
public:
virtualdoubleArea(){return0;
}
virtualdoublePerim(){return0;
virtualvoidShow(){}
};
classRectangle:
publicShape//矩形
private:
doublele;
//长
doublew;
//宽
Rectangle(doublele=0,doublew=0)
{
this->
le=le;
w=w;
~Rectangle()
doubleArea()const
returnle*w;
doublePerim()const
return2*(le+w);
voidShow()
cout<
<
"
Areais:
"
<
Area()<
endl;
Perimis:
Perim()<
endl<
constdoublePI=3.1415926535;
classCircle//圆形
intx;
inty;
doubler;
//半径
Circle(doubler=0)
r=r;
~Circle()
returnPI*r*r;
return2*PI*r;
classTriangle:
publicShape//三角形
inta,b,c,d,e,f;
doublel,m,n;
Triangle()
a=a;
b=b;
c=c;
d=d;
e=e;
f=f;
~Triangle()
doubleS;
S=(l+m+n)/2;
returnsqrt(S*(S-l)*(S-m)*(S-n));
return(l+m+n);
voidmain()
inta,b,c,d,e,f,x,y;
doublele,w,r,l1,m1,n1;
cout<
Rectangle:
inputa:
cout<
请输入矩形的长和宽:
cin>
>
le>
w;
if(le<
=0||w<
=0)
输入的长宽不能构成矩形"
gotoinputa;
else
RectangleRect(le,w);
Rect.Show();
Circle:
inputb:
请输入圆的圆心坐标xy和半径r:
x>
y>
r;
if(r<
输入的半径不能构成圆"
gotoinputb;
CircleCir(r);
Cir.Show();
Triangle:
inputc:
请输入三角形的顶点坐标(六个数字):
a>
b>
c>
d>
e>
f;
l1=sqrt((a-c)*(a-c)+(b-d)*(b-d));
m1=sqrt((a-e)*(a-e)+(b-f)*(b-f));
n1=sqrt((e-c)*(e-c)+(f-d)*(f-d));
TriangleTri;
Tri.l=l1;
Tri.m=m1;
Tri.n=n1;
if(l1<
=0||m1<
=0||n1<
0||(l1+m1)<
=n1||(m1+n1)<
=l1||(l1+n1)<
=m1)
输入的三个顶点不能构成三角形"
gotoinputc;
Tri.Show();
system("
pause"
);
}
2员工管理
头文件程序:
#pragmaonce
classemployee
intduty;
charnum,name,sex,salary;
employee(charnum=0,charname=0,charsex=0,intduty=0,charsalary=0)
num=num;
duty=duty;
sex=sex;
salary=salary;
name=name;
voidSetin(){}
voidpay(){}
voiddisplay(){}
classDate
voidSetYear(intyear);
voidSetMonth(intmonth);
voidSetDay(intday);
voidGetYear(intyear);
voidGetMonth(intmonth);
voidGetDay(intday);
源文件程序:
#include"
employee.h"
#includ