以一个小型公司的人员管理为例,说明类及成员函数的设计。提示:
/*人员信息管理系统:
以一个小型公司的人员管理为例,说明类及成员函数的设计。提示:
1) 类的设计:
某小型公司,需要存储雇员的编号、级别、月薪,并显示全部信息。根据这些需求,设计一个类employee,在该类中,包括的数据成员有:
编号(int individualEmpNo)
级别(int grade)
月薪(float accumPay)
成员函数有:
设置编号(void setEmpNo(int steps)):编号顺序加1(利用静态变量实现)
提取编号(void getEmpNo)
晋升级别(void promote(int increment)):提升的级别由参数指定
提取级别(int getGrade)
设置月薪(void SetAccumPay(float pa)):
提取月薪(float GetAccumPay)
构造函数(用于设置数据成员编号、级别和月薪初值)
析构函数
2) 整个程序分为两个独立的文档:employee.h(包含类的定义和类的实现)和employee.cpp(主函数文件)
3) 在主函数main()中创建employee类的两个对象,对它们设计编号、级别和月薪,并输出每个雇员的基本信息。*/
#include
using namespace std;
//以下是雇员类的声明
class employee
{
public:
employee();
employee(employee&e);
void setEmpNo(int);
int getEmpNo()
{
return individualEmpNo;
}
void promote(int);
int getGrade()
{
return grade;
}
void SetAccumPay(float);
float GetAccumPay()
{
return accumPay;
}
~employee()
{
//cout<<"析构函数被调用"<
}
private:
int individualEmpNo;//编号
static int numOfEmp;
int grade;//级别
float accumPay;//月薪
};
//以下是雇员类的成员函数的实现
int employee::numOfEmp=0;//设置静态变量
void employee::setEmpNo(int steps)//按照不同的steps
{
grade=steps;
numOfEmp++;
individualEmpNo+=numOfEmp;
}
void employee::promote(int increament)
{
grade=grade+increament;
//cout<<"employee::promote(int increament)被调用"<
}
void employee::SetAccumPay(float pa)//调整月薪
{
accumPay=pa+accumPay;
}
employee::employee()//设置数据成员编号、月薪、级别初值
{
individualEmpNo=1705110000;
accumPay=120.0;
grade=0;
//cout<<"构造函数被调用"<
}
employee::employee(employee&e)
{
individualEmpNo=e.individualEmpNo;
accumPay=e.accumPay;
grade=e.grade;
}
//以下是主函数
void main()
{
int step;
int increments;
float add;
employee e1;
cout<<"请输入e1员工级别"<<endl;
cin>>step;
e1.setEmpNo(step);
step=0;
employee e2=e1;
cout<<"请输入e2员工级别"<<endl;
cin>>step;
e2.setEmpNo(step);
step=0;
employee e3;
cout<<"请输入e3员工级别"<<endl;
cin>>step;
e3.setEmpNo(step);
cout<<"请输入e3员工需要调整的工资"<<endl;
cin>>add;
e3.SetAccumPay(add);
cout<<"请输入e3员工需要提升的级别"<<endl;
cin>>increments;
e3.promote(increments);
cout<<"e3员工编号为"<<e3.getEmpNo()<<endl;
cout<<"现在e3员工月薪为"<<e3.GetAccumPay()<<endl;
cout<<"现在e3员工级别为"<<e3.getGrade()<<endl;
}
本设计题目的任务是设计一个人员信息管理系统,并使用虚函数实现多态性,
完成显示不同人员信息的任务。设计employee类,用来存储雇员的编号,级别,月薪等信息。
能够对其进行操作和显示。以employee为基类派生出technician类,表示兼职技术人员,
以及manager类,表示经理,以及salesman类,表示兼职推销员。
利用manage类和salesman类派生出salesmanager类,表示销售经理。
注意使用虚基类。进一步使用虚函数和抽象类改进上面的程序。
本设计题目的目的是让学生进一步理解和掌握C++中类的继承,虚基类,多态性,虚函数以及抽象类技术及实现方法
/*本设计题目的任务是设计一个人员信息管理系统,并使用虚函数实现多态性,
完成显示不同人员信息的任务。设计employee类,用来存储雇员的编号,级别,月薪等信息。
能够对其进行操作和显示。以employee为基类派生出technician类,表示兼职技术人员,
以及manager类,表示经理,以及salesman类,表示兼职推销员。
利用manage类和salesman类派生出salesmanager类,表示销售经理。
注意使用虚基类。进一步使用虚函数和抽象类改进上面的程序。
本设计题目的目的是让学生进一步理解和掌握C++中类的继承,虚基类,多态性,虚函数以及抽象类技术及实现方法。*/
#include
#include
using namespace std;
//以下是雇员类的实现
class employee
{
protected:
string name;
int empNo;
int rank;
float salary;
public:
employee()
{
name="DefaultName";empNo=0;salary=0.0;rank=0;
}
employee(string name,int empNo,int rank,float salary)
{
this->name=name;
this->empNo=empNo;
this->rank=rank;
this->salary=salary;
}
~employee(){}
virtual float display(){return 0.0;}//设置虚函数,为派生类提供接口
};//employee
class manager:public virtual employee
{
protected:
int achievement;
public:
manager(string name,int empNo,int rank,float salary,int achievement):employee(name,empNo,rank,salary)
{
this->achievement=achievement;
}
~manager(){}
float display()
{
cout<<"经理人员的姓名为"<<name<<endl;
cout<<"经理人员的编号为"<<empNo<<endl;
cout<<"经理人员的级别为"<<rank<<endl;
cout<<"经理人员的工资为";
return salary+achievement;
}
};//manager
class technician:public employee
{
protected:
int workHours;
public:
technician(string name,int empNo,int rank,float salary,int workHours):employee(name,empNo,rank,salary)
{
this->workHours=workHours;
}
~technician(){}
float display()
{
cout<<"科研人员的姓名为"<<name<<endl;
cout<<"科研人员的编号为"<<empNo<<endl;
cout<<"科研人员的级别为"<<rank<<endl;
cout<<"科研人员的工资为";
return salary+workHours*200;
}
};//technician
class salesman:public virtual employee
{
protected:
float monthlysales;
public:
salesman(string name,int empNo,int rank,float salary,float monthlysales):employee(name,empNo,rank,salary)
{
this->monthlysales=monthlysales;
}
~salesman(){}
float display()
{
cout<<"销售人员的姓名为"<<name<<endl;
cout<<"销售人员的编号为"<<empNo<<endl;
cout<<"销售人员的级别为"<<rank<<endl;
cout<<"销售人员的工资为";
return salary+monthlysales*1.8;
}
};//salesman
class salesmanager:public manager,public salesman//虚基类
{
public:
salesmanager(string name,int empNo,int rank,float salary,float monthlysales,int achievement):employee(name,empNo,rank,salary),salesman(name,empNo,rank,salary,monthlysales),manager(name,empNo,rank,salary,achievement)
{
this->monthlysales=monthlysales;
this->achievement=achievement;
}
~salesmanager(){}
float display()
{
cout<<"销售经理的姓名为"<<name<<endl;
cout<<"销售经理的编号为"<<empNo<<endl;
cout<<"销售经理的级别为"<<rank<<endl;
cout<<"销售经理的工资为";
return salary+monthlysales*3.6+achievement;
}
};//salesmanager类多重继承
float display(employee *emptr)
{
return emptr->display();
}
int main(void)
{
employee *e1=new manager("s1",001,5,1000.0,20000);
employee *e2=new technician("s2",4,002,1000.0,35);
employee *e3=new salesman("s3",003,3,1000.0,2400);
employee *e4=new salesmanager("s4",4,004,1000.0,3500,5000);
cout<<display(e1)<<endl;
cout<<"/*****************************/"<<endl;
cout<<display(e2)<<endl;
cout<<"/*****************************/"<<endl;
cout<<display(e3)<<endl;
cout<<"/*****************************/"<<endl;
cout<<display(e4)<<endl;
return 0;
}