多态继承与派生
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();
}
**本程序功能:实现小型公司的工资管理,该公司主要有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();
}
相关文章推荐
- 继承派生多态(转东转西)
- 继承与派生,多继承,函数重载,构造函数调用顺序 静态多态和动态多态
- Python基础(6)- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)
- C++ 继承派生多态
- C++ 继承派生多态
- 类的继承与派生、多态、this指针、函数模板与类模板
- 实验三 、四 继承、派生和多态程序设计
- iOS 工作之余小总结(二)类的高度总结----封装,继承,派生,重写,多态,协议,分类,扩展,组合,聚合。
- C++标准中继承派生和多态知识补充
- self、类的继承和派生、实例变量修饰符、多态、类的本质
- C++中的多态和派生继承
- c++继承与派生
- 黑马程序员--OC--封装、继承、多态
- Java之继承与多态
- 面向对象的三大特性(封装 继承 多态)
- 面向对象的继承、封装、多态、抽象、接口相关
- JAVA继承、多态练习
- 【Python学习笔记】面向对象编程:继承和多态
- C++总结5——继承与多态
- 类的继承与派生