#include<iostream>
using namespace std;
class Employee //员工类
{
public:
int m_id;
char *m_name;
double m_money;
public:
static int m_num;
Employee(char *n);
virtual double Getmoney()=0;
virtual void show()=0;
};
int Employee::m_num = 1000;
Employee::Employee(char *n)
{
m_name = new char [10];
strcpy(m_name,n);
m_id = m_num;
m_num++;
}
class Sales //销售额类
{
protected:
static int m_sales_sum;
int m_sales;
public:
Sales(int s);
};
int Sales::m_sales_sum=0;
Sales::Sales(int s)
{
m_sales = s;
m_sales_sum += m_sales;
}
class Manager:public Employee
{
public:
Manager(char *n);
double Getmoney();
void show();
};
Manager::Manager(char *n):Employee(n)
{
m_money = 8000;
}
double Manager::Getmoney()
{
return m_money;
}
void Manager::show()
{
cout<<" 姓名 "<<m_name<<"职位: 经理 "<<" 工号 "<<m_id<<" 工资 "<<m_money<<endl;
}
class Technician :public Employee
{
protected:
int m_time;
public:
Technician(char *n,int t);
double Getmoney();
void show();
};
Technician::Technician(char *n,int t):Employee(n)
{
m_time = t;
}
double Technician::Getmoney()
{
m_money =100*m_time;
return m_money;
}
void Technician::show()
{
cout<<" 姓名 "<<m_name<<"职位: 工程师 "<<" 工号 "<<m_id<<" 工资 "<<m_money<<endl;
}
class Saleman:public Employee,public Sales
{
public:
Saleman(char *n,int s);
double Getmoney();
void show();
};
Saleman::Saleman(char *n,int s):Employee(n),Sales(s)
{
m_money = 0.04*m_sales;
}
double Saleman:: Getmoney()
{
return m_money;
}
void Saleman::show()
{
cout<<" 姓名 "<<m_name<<"职位: 销售员 "<<" 工号 "<<m_id<<"销售额:"<<m_sales<<" 工资 "<<m_money<<endl;
}
class Salemanager:public Employee,public Sales
{
public:
Salemanager(char *n,int s=0);
double Getmoney();
void show();
};
Salemanager::Salemanager(char *n,int s):Employee(n),Sales(s)
{
}
double Salemanager:: Getmoney()
{
m_money = 4000+0.04*m_sales_sum;
return m_money;
}
void Salemanager::show()
{
cout<<"姓名"<<m_name<<"职位: 销售经理 "<<"工号 "<<m_id<<"销售总额"<<m_sales_sum<<"工资 "<<m_money<<endl;
}
int main()
{
srand(time(NULL));
Employee *m = new Manager("manager");
m->show();
char name[20]={0};
Employee *ps[3];
for(int i=0;i<3;i++)
{
sprintf(name,"test%d",i+2);
ps[i] = new Saleman(name,rand()%100000);
}
for(int i=0;i<3;i++)
{
ps[i]->Getmoney();
ps[i]->show();
}
Employee *pt[3];
for(int i=0;i<3;i++)
{
sprintf(name,"Technician%d",i+2);
pt[i] = new Technician(name,rand()%300);
}
for(int i=0;i<3;i++)
{
pt[i]->Getmoney();
pt[i]->show();
}
Employee *pe = new Salemanager("Salemanager");
pe->Getmoney();
pe->show();
return 0;
}
答案为随机取值:
姓名 manager职位: 经理 工号 1000 工资 8000
姓名 test2职位: 销售员 工号 1001销售额:74708 工资 2988.32
姓名 test3职位: 销售员 工号 1002销售额:98858 工资 3954.32
姓名 test4职位: 销售员 工号 1003销售额:436 工资 17.44
姓名 Technician2职位: 工程师 工号 1004 工资 4000
姓名 Technician3职位: 工程师 工号 1005 工资 4000
姓名 Technician4职位: 工程师 工号 1006 工资 1400
姓名Salemanager职位: 销售经理 工号 1007销售总额174002工资 10960.1