C++语言复习十 类的继承和派生 实例

来源:互联网 发布:销售网络的含义 编辑:程序博客网 时间:2024/05/29 03:12

 类的继承和派生 实例

继承关系:

----------------------------------------------

普通雇员---->(pubilc)兼职技术人员

-----------------------------------------------

普通雇员---->(virtual pubilc)推销员

------------------------------------------------

普通雇员---->(virtual pubilc)经理

-----------------------------------------------

---->推销员

普通雇员                      (pubilc)  ---->销售经理

                ---->经理    

-----------------------------------------------


#include<iostream.h>#include<string.h>//----------------------------------------------------------------------------//类的定义class employee    //普通雇员{protected:char*name;intindividualEmpNo;   //个人编号intgrade;      //级别floataccumPay;     //月薪总额staticint employeeNo;  //本公司职员编号目前的最大值public:employee();  //构造函数~employee();    //析构函数void pay();     //计算月薪函数void promote(int);    //升级函数void displayStatus();    //显示人员信息};class technician: public employee      //兼职技术人员类{private:floathourlyRate;    //每小时酬金intworkHours;      //当月工作时数public:technician();      //构造函数void pay();        //计算月薪函数void displayStatus();    //显示人员信息};class salesman: virtual public employee      //推销员类{protected:float CommRate;    //按销售额提取酬金的百分比float sales;       //当月销售额public:salesman();void pay();void displayStatus();   //显示人员信息};class manager:virtual public employee    //经理类{protected:float monthlyPay;  //固定月薪数public:manager();void pay();void displayStatus();};class salesmanager:public manager,public salesman    //销售经理类{public:salesmanager();void pay();void displayStatus();    //显示人员信息};//---------------------------------------------------------------------------------------//类的实现int employee::employeeNo = 1000;  //员工编号基数10000employee::employee(){char namestr[50];      //输入雇员的姓名临时存放在namestr中cout<<"请输入一个雇员的姓名:";cin>>namestr;name = new char[strlen(namestr)+1];    //动态申请用于存放的内存空间strcpy(name,namestr);//将临时存放的姓名复制到nameindividualEmpNo = employeeNo++;          //新输入的员工,其编号为目前最大编号加1grade = 1;               //级别初值为1accumPay = 0.0;           //月薪总额初值为0}employee::~employee(){delete name;          //在析构函数中删除为存放姓名动态分配的内存空间}void employee::pay ()   //计算月薪{}void employee::promote (int increment){grade+=increment;       //升级,提升的级数由increment指定}void employee::displayStatus ()     //显示人员信息,空函数{}technician::technician(){hourlyRate = 100;  //每小时酬金100}void technician::pay(){cout<<"请输入"<<name<<"本月的工作时数:";cin>>workHours;accumPay = hourlyRate*workHours;//计算月薪。按小时计算cout<<"兼职技术人员:"<<name<<"编号:"<<individualEmpNo<<"本月工资"<<accumPay<<endl;}void technician::displayStatus (){cout<<"兼职技术人员:"<<name<<"编号:"<<individualEmpNo<<"级别为"<<grade<<"级,以付本月工资"<<accumPay<<endl;}salesman::salesman(){CommRate = 0.04f;   //销售提成比例4%}void salesman::pay (){cout<<"请输入"<<name<<"本月销售额";cin>>sales;accumPay = sales*CommRate;  //月薪=销售提成cout<<"推销员:"<<name<<"编号:"<<individualEmpNo<<"本月工资"<<accumPay<<endl;}void salesman::displayStatus (){cout<<"推销员:"<<name<<"编号:"<<individualEmpNo<<"级别为"<<grade<<"级,已付本月工资"<<accumPay<<endl;}manager::manager(){monthlyPay = 8000;  //固定月薪}void manager::pay (){accumPay = monthlyPay;     //月薪总额即固定月薪数cout<<"经理:"<<name<<"编号:"<<individualEmpNo<<"本月工资"<<accumPay<<endl;}void manager::displayStatus (){cout<<"经理:"<<name<<"编号:"<<individualEmpNo<<"级别为"<<grade<<"级,已付本月工资"<<accumPay<<endl;}salesmanager::salesmanager(){monthlyPay = 5000;CommRate = 0.005f;}void salesmanager::pay(){cout<<"请输入"<<employee::name<<"所管部门本月的销售总额";cin>>sales;accumPay = monthlyPay+CommRate*sales;//月薪=固定月薪 +销售提成cout<<"销售经理:"<<name<<"编号:"<<individualEmpNo<<"本月工资"<<accumPay<<endl;}void salesmanager::displayStatus (){cout<<"销售经理:"<<name<<"编号:"<<individualEmpNo<<"级别为"<<grade<<"级,已付本月工资"<<accumPay<<endl;}//-----------------------------------------------------------------//主函数int main(){manager m1;      //定义一个经理m1technician t1;   //定义一个兼职技术人员t1salesmanager sm1;//定义一个销售经理sm1salesman s1;     //定义一个推销员s1m1.promote(3);m1.pay ();m1.displayStatus ();t1.promote (2);t1.pay ();t1.displayStatus ();sm1.promote (2);sm1.pay ();sm1.displayStatus ();s1.pay();s1.displayStatus ();return 0;}//----------------------------------------------------------------------


某次运行结果:(红色框是cin的数据。)




原创粉丝点击