实验2类的继承与派生报告图形类设计与员工管理.docx
《实验2类的继承与派生报告图形类设计与员工管理.docx》由会员分享,可在线阅读,更多相关《实验2类的继承与派生报告图形类设计与员工管理.docx(21页珍藏版)》请在冰豆网上搜索。
实验2类的继承与派生报告图形类设计与员工管理
实验报告
艺术与设计学院数字媒体技术专业班成绩评定_______
学号姓名(合作者____学号__________)教师签名_______
预习情况
操作情况
考勤情况
数据处理情况
实验二题目类的继承与派生第11周星期2第34节
一、实验目的与要求
实验目的:
1、理解继承在面向对象程序设计中的重要作用;
2、理解继承和派生的概念;
3、掌握通过继承派生出一个新类的方法。
实验要求:
实验前应复习类的继承与派生的相关知识,在此基础上编写程序,运行程序并记录运行结果。
在程序调试中,要实现准备充分的测试用例;保存源程序、目标文件、可执行文件。
二、实验方案
1.图形类
设计一个图形基类:
Shape,在此基础上派生Rectangle、Circle、Triangle类。
要求:
(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
#include
usingnamespacestd;
classShape
{
public:
virtualdoubleArea(){return0;}
virtualdoublePerim(){return0;}
virtualvoidShow(){}
};
classRectangle:
publicShape//矩形
{
private:
doublele;//长
doublew;//宽
public:
Rectangle(doublele=0,doublew=0)
{
this->le=le;
this->w=w;
}
~Rectangle()
{
}
doubleArea()const
{
returnle*w;
}
doublePerim()const
{
return2*(le+w);
}
voidShow()
{
cout<<"Areais:
"<
cout<<"Perimis:
"<}
};
constdoublePI=3.1415926535;
classCircle//圆形
{
private:
intx;
inty;
doubler;//半径
public:
Circle(doubler=0)
{
this->r=r;
}
~Circle()
{
}
doubleArea()const
{
returnPI*r*r;
}
doublePerim()const
{
return2*PI*r;
}
voidShow()
{
cout<<"Areais:
"<
cout<<"Perimis:
"<}
};
classTriangle:
publicShape//三角形
{
private:
inta,b,c,d,e,f;
public:
doublel,m,n;
Triangle()
{
this->a=a;
this->b=b;
this->c=c;
this->d=d;
this->e=e;
this->f=f;
}
~Triangle()
{
}
doubleArea()const
{
doubleS;
S=(l+m+n)/2;
returnsqrt(S*(S-l)*(S-m)*(S-n));
}
doublePerim()const
{
return(l+m+n);
}
voidShow()
{
cout<<"Areais:
"<
cout<<"Perimis:
"<}
};
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)
{
cout<<"输入的长宽不能构成矩形"<gotoinputa;
}
else
{
RectangleRect(le,w);
Rect.Show();
cout<<"Circle:
"<}
inputb:
cout<<"请输入圆的圆心坐标xy和半径r:
"<cin>>x>>y>>r;
if(r<=0)
{
cout<<"输入的半径不能构成圆"<gotoinputb;
}
else
{
CircleCir(r);
Cir.Show();
cout<<"Triangle:
"<}
inputc:
cout<<"请输入三角形的顶点坐标(六个数字):
"<cin>>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)
{
cout<<"输入的三个顶点不能构成三角形"<gotoinputc;
}
else
{
Tri.Show();
}
system("pause");
}
2员工管理
头文件程序:
#pragmaonce
classemployee
{
private:
intduty;
charnum,name,sex,salary;
public:
employee(charnum=0,charname=0,charsex=0,intduty=0,charsalary=0)
{
this->num=num;
this->duty=duty;
this->sex=sex;
this->salary=salary;
this->name=name;
}
voidSetin(){}
voidpay(){}
voiddisplay(){}
};
classDate
{
public:
voidSetYear(intyear);
voidSetMonth(intmonth);
voidSetDay(intday);
voidGetYear(intyear);
voidGetMonth(intmonth);
voidGetDay(intday);
};
源文件程序:
#include"employee.h"
#includ