您的位置:首页 > 其它

多态继承与派生

2012-11-02 11:02 176 查看
/************************************************************************

**本程序功能:实现小型公司的工资管理,该公司主要有4类人员:经理、

**兼职技术人员、销售员和销售经理。要求存储这些人员的编号、姓名、

**月工资,计算月工资并显示全部信息,经理拿固定月薪8K,兼职技术人员按每小时

**100元领月薪,销售员当月销售额4%提成,销售经理拿5K并提成所管辖部门当月销售

**总额的5%%.

***方法:本程序看起来比较复杂,其实分开解决是很简单的,首先定义一个职员的基

******** 类,然后实现兼职技术人员,在实现经理,然后在实现销售员与销售经理

**************************************************************************/

#include <iostream>

using namespace std;

class employee //定义一个基类(包含6个成员)

{

protected:

int Numb; //存储职工编号

char name[10]; //存储职工名字

int salary; //存储职工本月工资

public:

employee() //构造函数 获取职工编号和姓名

{

cout << "职工编号:";

cin >> Numb;

cout << "职工姓名:";

cin >> name;

salary = 0;

}

virtual void pay() {}//计算月工资

virtual void disp() {}//显示全部信息(编号、姓名、月工资)

};

class manager:virtual public employee//为什么要用virtual ,不用报错,靠!

{

protected:

double monthlypay;

public:

manager() { monthlypay = 8000; }

void pay() {salary = monthlypay; }

void disp()

{

cout << "经理" << name << "(编号为" << Numb \

<< ")" << "本月工资:" << salary << endl;

}

};

class technician:public employee//派生兼职技术人员

{

double hourlyrate;//每小时的额度

int workhours;/*月工作的小时数*/

public:

technician() { hourlyrate = 100; }

void pay()

{

cout << name << "本月工作时数:";/*获取工作时间计算工资*/

cin >> workhours;

salary = hourlyrate * workhours;

}

void disp()

{

cout << "兼职技术人员" << name << "(编号为" << Numb \

<< ")" << "本月工资" << salary << endl;

}

};

class salesman:virtual public employee

{

protected:

double commrate;

double sales;

public:

salesman() { commrate = 0.04;}

void pay()

{

cout << name << "本月销售额:";

cin >> sales;

salary = sales * commrate;

}

void disp()

{

cout << "销售员" << name << "(编号为" << Numb \

<< ")" << "本月工资:" << salary << endl;

}

};

class salesmanager:public manager,public salesman

{

public:

salesmanager()

{

monthlypay = 5000;

commrate = 0.005;

}

void pay()

{

cout << name << "所管部门月销售量:";

cin >> sales;

salary = monthlypay + commrate * sales;

}

void disp()

{

cout << "销售经理" << name << "(编号为" << Numb \

<< ")" << "本月工资:" << salary << endl;

}

};

void main()

{

manager m1;

technician t1;

salesman s1;

salesmanager sm1;

m1.pay();

m1.disp();

t1.pay();

t1.disp();

s1.pay();

s1.disp();

sm1.pay();

sm1.disp();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: