Employee.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
//姓名 工號 等級
class Employee
{
public:
Employee();
virtual void getSalary()=0;
virtual void show();
virtual ~Employee();//虛析構(gòu)函數(shù)
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 <iostream>
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();
//不指明基類構(gòu)造就會調(diào)用默認(rèn)構(gòu)造
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 <iostream>
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();
//不指明基類構(gòu)造就會調(diào)用默認(rèn)構(gòu)造
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
// 多態(tài)工資計算-23期-92-子羽.cpp : 定義控制臺應(yīng)用程序的入口點。
//基本工資 = 2500 * 出勤率
//
//提成 = 提成比例 * 銷售份額
//員工 姓名 工號 等級
//普通員工 基本工資
//經(jīng)理 獎金 + 基本工資(獎金)
//銷售 基本工資 / 2 + 提成(提成比例, 銷售份額)
//結(jié)合繼承,多態(tài)設(shè)計普通員工,經(jīng)理,銷售的薪酬計算
#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;
}
結(jié)果:

薪資計算.png