Employee.h
#pragma once
#include
#include
using namespace std;
//姓名 工号 等级
class Employee
{
public:
Employee();
virtual void getSalary()=0;
virtual void show();
virtual ~Employee();//虚析构函数
protected:
float m_salary;
float m_baseSalary;//基本工资
float m_attendanceRate;//出勤率
string m_name;
int m_no;
int m_level;
};
Employee.cpp
#include "stdafx.h"
#include "Employee.h"
#include
using namespace std;
Employee::Employee()
{
m_name = "";
m_no = 0;
m_level = 0;
m_attendanceRate = 0;
m_baseSalary = 2500;
m_salary = 0.0;//计算得到
}
Employee::~Employee()
{
}
void Employee::show(){
cout << "姓名:" << m_name << "工号:" << m_no << "等级:" << m_level << "薪资:" << m_salary << endl;
}
OrdinaryEmployee.h
#pragma once
#include "Employee.h"
class OrdinaryEmployee : public Employee
{
public:
OrdinaryEmployee();
//不指明基类构造就会调用默认构造
OrdinaryEmployee(string name,int no,int level,float attendanceRate);
virtual void getSalary();
~OrdinaryEmployee();
};
OrdinaryEmployee.cpp
#include "stdafx.h"
#include "OrdinaryEmployee.h"
OrdinaryEmployee::OrdinaryEmployee()
{
}
void OrdinaryEmployee::getSalary(){
m_salary = m_attendanceRate * m_baseSalary;
}
OrdinaryEmployee::OrdinaryEmployee(string name, int no, int level, float attendanceRate){
m_name = name;
m_no = no;
m_level = level;
m_attendanceRate = attendanceRate;
}
OrdinaryEmployee::~OrdinaryEmployee()
{
}
SalesMan.h
#pragma once
#include "Employee.h"
#include "OrdinaryEmployee.h"
class SalesMan : public OrdinaryEmployee
{
public:
SalesMan();
SalesMan(string name, int no, int level, float commissionRate, float sales, float attendanceRate);
~SalesMan();
void getSalary();
private:
float m_commissionRate;//提成比例
float m_sales;//销售份额
};
SalesMan.cpp
#include "stdafx.h"
#include "SalesMan.h"
#include
using namespace std;
SalesMan::SalesMan()
{
}
SalesMan::SalesMan(string name, int no, int level, float commissionRate, float sales, float attendanceRate) :OrdinaryEmployee(name, no, level, attendanceRate){
m_sales = sales;
m_commissionRate = commissionRate;
}
void SalesMan::getSalary(){
m_salary = m_baseSalary * m_attendanceRate / 2 + m_sales * m_commissionRate;
}
SalesMan::~SalesMan()
{
}
OrdinaryEmployee.h
#pragma once
#include "Employee.h"
class OrdinaryEmployee : public Employee
{
public:
OrdinaryEmployee();
//不指明基类构造就会调用默认构造
OrdinaryEmployee(string name,int no,int level,float attendanceRate);
virtual void getSalary();
~OrdinaryEmployee();
};
OrdinaryEmployee.cpp
#include "stdafx.h"
#include "OrdinaryEmployee.h"
OrdinaryEmployee::OrdinaryEmployee()
{
}
void OrdinaryEmployee::getSalary(){
m_salary = m_attendanceRate * m_baseSalary;
}
OrdinaryEmployee::OrdinaryEmployee(string name, int no, int level, float attendanceRate){
m_name = name;
m_no = no;
m_level = level;
m_attendanceRate = attendanceRate;
}
OrdinaryEmployee::~OrdinaryEmployee()
{
}
main.cpp
// 多态工资计算-23期-92-子羽.cpp : 定义控制台应用程序的入口点。
//基本工资 = 2500 * 出勤率
//
//提成 = 提成比例 * 销售份额
//员工 姓名 工号 等级
//普通员工 基本工资
//经理 奖金 + 基本工资(奖金)
//销售 基本工资 / 2 + 提成(提成比例, 销售份额)
//结合继承,多态设计普通员工,经理,销售的薪酬计算
#include "stdafx.h"
#include "Manager.h"
#include "SalesMan.h"
#include "OrdinaryEmployee.h"
int _tmain(int argc, _TCHAR* argv[])
{
OrdinaryEmployee oe1 = OrdinaryEmployee("jason", 1, 1, 0.98);
oe1.getSalary();
oe1.show();
Manager m1 = Manager("rose", 3, 1, 1 , 3000);
m1.getSalary();
m1.show();
SalesMan am1 = SalesMan("jack", 2, 1, 0.95, 300000, 0.04);
am1.getSalary();
am1.show();
return 0;
}
结果: