下面是小编为大家整理的类继承,供大家参考。
本科学生实验报告
C++ 课程设计
姓
名
杨先刚
学号 0104028
专
业 软件工程
班级
105
实验项目
类和类的继承
实验类别
基础实验
指导教师
严军勇
开课学期
2011 至 2012 学年 第一 学期
一、
实验设计方案 实验名称:类和类的继承 实验时间:2011-9-13——2011-9-14
实验场地:H123 软件环境:VC6.0/Windows XP 1、 实验内容与目的(简单介绍实验内容,说明实验目的)
实验目的:1)掌握类的继承和虚拟继承;2)掌握函数重载和常用运算符的重载 实验内容:1)
你的题目
2)
你的题目 1. 定义 Staff(员工)类,定义 Staff(员工)类,由 Staff 分别派生出 Saleman(销售员)类和 Manager(经理)类,再由 Saleman(销售员)类和 Manager(经理)类采用多重继承方式派生出新类 SaleManager(销售经理)类。
要求:
(6)①在 Staff 类中包含的数据成员有编号(num)、姓名(name)、出勤率(rateOfAttend)、基本工资(basicSal)和奖金(prize)。在 Saleman 类中还包含数据成员销售员提成比例(deductRate)和个人销售额(personAmount),在 Manager 类中还包含数据成员经理提成比例(totalDeductRate)和总销售额(totalAmount)。在 SaleManager 类中不包含其他数据成员。
②各类人员的实发工资公式如下:
员工实发工资=基本工资+奖金*出勤率 销售员实发工资=基本工资+奖金*出勤率+个人销售额*销售员提成比例 经理实发工资=基本工资+奖金*出勤率+总销售额*经理提成比例 销售经理实发工资=基本工资+奖金*出勤率+总销售额*经理提成比例+个人销售额*销售员提成比例 ③每个类都有构造函数、输出基本信息函数(Output)和输出实发工资函数(OutputWage)。
你的题目 2. (5)设计一个时间类 Time,要求如下。
1.包含时(hour)、分(minute)、秒(second)私有数据成员。
2.包含构造函数,重载关于一时间加上另一时间的加法运算符(+)、重载关于一时
间减去另一时间的减加运算符(-)、重载输出运算符(<<)与输入运算符(>>)等。
—————————————————————————————————————— 2、实验准备工作(阐述解决问题所涉及的知识内容或算法思想等,若是算法思想,则至少要画一个算法流程图来说明)
1.对于实验 1 是先从课本上的实验题依次先看过来的,有利于回忆以前学过的关于继承的知识, virtual 的应用作用。
2.实验 2 也基本上是先借助课本实验题慢慢做过来,对了重载函数的定义与其使用,还有运算符的重载的知识
—————————————————————————————————————— 二、实验 步骤、测试与 结果分析 1、源程序的设计(在此附上源程序清单)
#include<iostream> #include<string> using namespace std; class Staff//定义员工类 {
protected:
string num;
string name;
float rateofattend;
float basicsal;
float prize; public:
Staff(string nu,string na,float rate,float basic,float pri) {
num=nu;
name=na;
rateofattend=rate;
basicsal=basic;
prize=pri; }//构造函数 void output() //员工基本信息输出函数 {
cout<<"编号:"<<num<<endl;
cout<<"姓名:"<<name<<endl;
cout<<"出勤率:"<<rateofattend<<endl;
cout<<"基本工资:"<<basicsal<<endl;
cout<<"奖金:"<<prize<<endl; } void outputwage() {
cout<<"员工实发工资:"<<basicsal+prize*rateofattend<<endl;
cout<<endl; }
};//员工实发工资输出函数 class saleman:virtual public Staff//销售人员公有继承 { protected:
float deductrate
;
float personamount; public:
saleman(string nu,string na,float rate,float basic,float pri,float de,float pe)
:Staff(nu,na,rate,basic,pri)
{
deductrate=de;
personamount=pe;
}
void output()
{
Staff::output();
cout<<"销售员提成比例:"<<deductrate<<endl;
cout<<"个人销售额:"<<personamount<<endl;
};
void outputwage()
{
Cout<<” 销 售 员 实 发 工资:"<<basicsal+prize*rateofattend+deductrate*personamount<<endl;
cout<<endl;
} }; class manager:virtual public Staff { protected:
float totaldeductrate;
float totalpersonamount; public:
manager(string nu,string na,float rate,float basic,float pri,float totalde,float totalpe)
:Staff(nu,na,rate,basic,pri)
{
totaldeductrate=totalde;
totalpersonamount=totalpe;
}
void output()
{
Staff::output();
cout<<"经理提成比例:"<<totaldeductrate<<endl;
cout<<"经理总销售额:"<<totalpersonamount<<endl;
};
void outputwage()
{
cout<<" 经 理 实 发 工资:"<<basicsal+prize*rateofattend+totaldeductrate*totalpersonamount<<endl;
cout<<endl;
} }; class salemanager:public saleman,public manager {
public:
salemanager(string nu,string na,float rate,float basic,float pri,float de,float pe,float totalde,float totalpe)
:Staff(nu,na,rate,basic,pri),saleman(nu,na,rate,basic,pri,de,pe),manager(nu,na,rate,basic,pri,totalde,totalpe){}
void output()
{
Staff::output();
cout<<"销售员提成比例:"<<deductrate<<endl;
cout<<"个人销售额:"<<personamount<<endl;
cout<<"经理提成比例:"<<totaldeductrate<<endl;
cout<<"经理总销售额:"<<totalpersonamount<<endl;
} void outputwage() { cout<<" 销 售 总 经 理 实 发 工资:"<<basicsal+prize*rateofattend+deductrate*personamount+totaldeductrate*totalpersonamount<<endl;
cout<<endl; } }; int main() { int n;
for(int i=0;i<3;i++) {cout<<"注意!销售员工信息按 1,经理请按 2,经理销售按 3!请输入数字:";
cin>>n;
{if(n==2)
{manager C("0104027","黄坚坚",0.95,14000,2800,0.40,40000);
C.output();
C.outputwage();
} if(n==1) {saleman B("0104029","陈庭",0.80,12000.0,3000.0,0.20,10000.0); B.output(); B.outputwage(); } if(n==3) {
salemanager
A("0104028",” 杨 先 刚",0.90,20000.0,3600.0,0.44,30000.0,0.25,20000.0);
A.output();
A.outputwage();
}
} }
return 0; }
实验 2 源代码
#include <iostream.h>
class Time//定义时间类 { private:
int hour;
int minute;
int second; public:
Time(inth=0,intm=0,ints=0):hour(h),minute(m),second(s){} //构造带有参数的构造函数
friend istream& operator>>(istream&,Time&t);//重载输入运算符友元函数
friend ostream& operator<<(ostream&,Time&t);//重载输出运算符友元函数
Time operator +(Time &t1);//重载时间加函数
Time operator -(Time &t1);//重载时间减函数 }; Time Time::operator +(Time &t1)// {
Time T;
int total;
total=hour*3600+minute*60+second+t1.hour*3600+t1.minute*60+t1.second;//把标准时间的时分秒全部化为时分秒
T.second= total - total /60*60;
T.minute= total /60- total /60/60*60;
total/3600>24?T.hour=total/3600-24:T.hour=total/3600; // total /360>24 是用于判断是否过了 24 小时,如果过了就要减掉 24
return T; } Time Time::operator -(Time &t1)//
{
Time T;
int total;
total=hour*3600+minute*60+second-(t1.hour*3600+t1.minute*60+t1.second);
if(total <0) total =- total;//因为两时间相减可能会使秒数为负数,所以 total =- total 目的就是当出现负数时,把它变成正数
T.hour= total /3600;
T.minute=( total -T.hour*3600)/60;
T.second= total %60;
return T; } istream& operator >> (istream &input,Time &t)// {
cout<<"请输入时间,分,秒:";
input>>t.hour>>t.minute>>t.second;
return input; } ostream& operator <<(ostream& output,Time &t)// {
output<<t.hour<<":"<<t.minute<<":"<<t.second<<endl;
return output; } int main() {
Time t1,t2,t3,t4;//定义四个对象
cin>>t1>>t2;
cout<<endl;
cout<<"第一次输入的时间:"<<t1<<endl;//输出第一次输入的时间
cout<<"第二次输入的时间:"<<t2<<endl;//输出第二次输入的时间
t3=t1+t2;
t4=t1-t2;
cout<<"两时间之和:"<<t3<<endl;//两时间之和
cout<<"两时间之差:"<<t4<<endl;//两时间之差
return 0; } —————————————————————————————————————— 2、 实验现象及结论(应用文字和程序运行的截图说明程序测试现象,并解释结果)
运行开始时会跳出一段说明操作性文字,注意按照操作就可以查询你需要找的信息了
实验 2 截图
—————————————————————————————————————— 3、 实验总结(是否成功解决问题,总结实验中最有价值的内容,程序能够在哪些方面进一步改善,自我评价成败得失)
在实验中,第一题还是做得比较轻松,但是也有一个不可饶恕的错误,就是关于最后的 Salemanager 居然没有初始化!缺少{},当时查了我起码半个小时啊,可悲啊!后面还是同学厉害,一个{}就解决了!我表示不能淡定!第二题就有点小小困难了,不过困难不要紧,有信心解决,前面都有相应的例题了,所以我得把它解决掉!要不能对不起党,对不起人民了。
指导老师评语:
:
得分:
签名:严军勇
年
月
日