1、首先明确Person.h里面的内容
(1)公司职员包括:经理Manager、技术人员Technician、销售SalesMan、销售经理SaleManager。
(2)当每增加一个员工,对应的员工工号就加一。
(3)薪资:经理每月固定工资8000元;技术人员每天300元,根据工作天数计算工资;销售人员每月工资是个人销售总额的4%;销售经理每月工资是部门销售总额的2%,再Sale加上固定的工资4000元。
(4)销售经理SaleManager既有固定薪水又有提成,所以直接让它继承Manager和SaleMan;为了减省代码和空间,将manager和SaleMan都是虚继承。
(5)c++中没有java中接口这个概念,可以用纯虚函数实现接口 。
(6)为了计算销售人员的数目,用了两个静态成员变量,一个用来计算总人数,来获取工号,一个用来计算销售总额。
- #ifndef _PERSON_H
- #define _PERSON_H
- #include<iostream>
- #include<string.h>
- using namespace std;
- class Person
- {
- protected:
- static int count;
- string m_name;
- double m_salary; //访问权限定义为保护类型是为了能被继承下去
- int m_id; //工号
- public:
- virtual void print() = 0;
- virtual double Get() = 0; //纯虚函数
- };
- class Manager : virtual public Person //经理
- {
- protected:
- int m_base;
- public:
- Manager(string n,int b);
- double Get();
- void show();
- };
- class Technician : public Person //技术人员
- {
- private:
- int m_day;
- public:
- Technician(string n,int d);
- double Get();
- void show();
- };
- class SaleMan : virtual public Person //销售人员
- {
- protected:
- static int sum;
- int m_s1;
- public:
- SaleMan(string n,int s1);
- double Get();
- void show();
- };
- class SaleManager : public Saleman,public Manager //销售经理
- {
- public:
- SaleManager(string n);
- double Get();
- void show();
- };
- #endif
2、根据类中内容编写各个类的成员函数
- #include<iostream>
- #include<string.h>
- #include"Person.h"
- using namespace std;
- int Person::count = 0; //静态成员变量 计算工号
- int SaleMan::sum = 0; //静态成员变量 计算部门销售总额
- Person::Person()
- {
- count++;
- m_id = count;
- }
- Manager::Manager(string n,int b=8000)
- {
- m_name = n;
- m_base = b;
- }
- double Manager::Get()
- {
- m_salary = m_base; //基本的固定工资
- return m_salary;
- }
- void Manager::show()
- {
- cout<< "名字:" << m_name << "工号:" << m_id << "工资:" << Get() <<endl;
- }
- Technician::Technician(string n,int d)
- {
- m_name = n;
- m_day = d;
- }
- double Technician::Get()
- {
- m_salary = m_day*300
- return m_salary;
- }
- void Technician::show()
- {
- cout<< "名字:" << m_name << "工号:" << m_id << "工资:" << Get() <<endl;
- }
- SaleMan::SaleMan(string n,int s1=0)
- {
- m_name = n;
- m_s1 = s1;
- sum += m_s1; //部门销售总额就是个人销售总额的和
- }
- double SaleMan::Get()
- {
- m_salary = 0.04*m_s1;
- return m_salary;
- }
- void Saleman::show()
- {
- cout<< "名字:" << m_name << "工号:" << m_id << "工资:" << Get() <<endl;
- }
- SaleManager::SaleManager(string n) : SaleMan(n),Manager(n,4000)
- {
- //已经继承,不需再写
- }
- double SaleManager::Get()
- {
- m_salary = 0.02*sum + m_base;
- return m_salary;
- }
- void SaleManager::show()
- {
- cout<< "名字:" << m_name << "工号:" << m_id << "工资:" << Get() <<endl;
- }
3、最后编写main函数,实现功能
- #include <iostream>
- #include "Person.h"
- using namespace std;
- int main()
- {
- srand(time(NULL));
- char name[20] = {0};
- Person *p1[5] = {0};
- Person *p2[10] = {0};
- Person *p3 = NULL;
- Person *p4 = new Manager("aa",8000);
- for(int i=0;i<5;i++) //技术人员
- {
- sprintf(name,"Technician%d",i);
- p1[i] = new Technician(name,rand() % 22 + 1);
- p1[i]->show();
- }
- for(int i=0;i<10;i++) //销售人员
- {
- sprintf(name,"S%d",i);
- p2[i] = new SaleMan(name,rand() % 100000);
- p2[i]->show();
- }
- p3 = new SaleManager("bb");
- p3->show();
- return 0;
- }