C++ 继承Employee类
#include<iostream>
#include<cstring>
using namespace std;
//员工类
class Employee {
public:
Employee(int new_num, char* new_name, double new_basicSal, double new_prize); //员工类构造函数声明
void Show(); //输出员工类基本信息
double OutputWage1(); //返回员工薪水
void ShowSalary(); // 打印员工薪水
private:
int num; //编号
char name[18]; //姓名
double basicSal; //基本工资
double prize; //奖金
};
//员工类构造函数初始化
Employee::Employee(int new_num, char* new_name, double new_basicSal, double new_prize){
num = new_num;
strcpy(name, new_name);
basicSal = new_basicSal;
prize = new_prize;
}
// 输出员工类基本信息
void Employee::Show() {
cout << "编号:" << num << endl;
cout << "姓名:" << name << endl;
cout << "基本工资:" << basicSal << "元" << endl;
cout << "奖金:" << prize << "元" << endl;
}
//返回员工实发工资
double Employee::OutputWage1(){
double salary;
//员工实发工资 = 基本工资 + 奖金
salary = basicSal + prize;
return salary;
}
void Employee::ShowSalary(){
cout << "实发工资:" << OutputWage1() << "元" << endl;
}
//销售员类
class Saleman :virtual public Employee {
public:
Saleman(int a, char* b, double d, double e, double f, double g);
void Output2();//输出 Employee+Saleman 基本信息
void output2(); // 只输出 Saleman 基本信息
double OutputWage2();
void ShowSalary();
private:
double daductRatr; //成员销售额提成比例
double personAmount;//个人销售额
};
Saleman::Saleman(int new_num, char* new_name, double new_basicSal, double new_prize, double new_daductRatr, double new_personAmount) :Employee(new_num, new_name, new_basicSal, new_prize){
daductRatr = new_daductRatr;
personAmount = new_personAmount;
}
//输出 Employee+Saleman 基本信息
void Saleman::Output2() {
Show();
cout << "销售员提成比例:" << daductRatr << endl;
cout << "个人销售额:" << personAmount << "元" << endl;
}
// 只输出 Saleman 基本信息
void Saleman::output2() {
cout << "销售员提成比例:" << daductRatr << endl;
cout << "个人销售额:" << personAmount << "元" << endl;
}
//返回销售员实发工资
double Saleman::OutputWage2() {
double salary;
//销售员实发工资 = 基本工资 + 奖金 * 出勤率 + 个人销售额 * 销售员提成比例
salary = Employee::OutputWage1() + personAmount * daductRatr;
return salary;
}
void Saleman::ShowSalary(){
cout << "实发工资:" << OutputWage2() << "元" << endl;
}
//经理类
class Manager :virtual public Employee {
public:
Manager(int new_num, char* new_name, double new_basicSal, double new_prize, double new_totalDeductRate, double new_totalAmount);
void Output3();//输出 Employee+Manager 基本信息
void output3();//只输出 Manager 基本信息
double OutputWage3();//返回经理实发工资
void ShowSalary();
private:
double totalDeductRate;
double totalAmount;
};
Manager::Manager(int new_num, char* new_name, double new_basicSal, double new_prize, double new_totalDeductRate, double new_totalAmount) :Employee(new_num, new_name, new_basicSal, new_prize){
totalDeductRate = new_totalDeductRate; //经理提成比例
totalAmount = new_totalAmount;//总销售额
}
//输出 Employee+Manager 基本信息
void Manager::Output3() {
Show();
cout << "经理提成比例:" << totalDeductRate << endl;
cout << "总销售额:" << totalAmount << "元" << endl;
}
//只输出 Manager 基本信息
void Manager::output3() {
cout << "经理提成比例:" << totalDeductRate << endl;
cout << "总销售额:" << totalAmount << "元" << endl;
}
//返回经理实发工资
double Manager::OutputWage3() {
double salary;
//经理实发工资 = 基本工资 + 奖金 + 总销售额 * 经理提成比例
salary = Employee::OutputWage1() + totalAmount * totalDeductRate;
return salary;
}
void Manager::ShowSalary(){
cout << "实发工资:" << OutputWage3() << "元" << endl;
}
//销售经理类
class SaleManager :public Saleman, public Manager {
public:
SaleManager(int new_num, char* new_name, int new_basicSal, int new_prize, double f, double g, double h, double i);
void Output4();//输出销售经理基本信息
double OutputWage4();//返回销售经理实发工资
void ShowSalary();
};
SaleManager::SaleManager(int new_num, char* new_name, int new_basicSal, int new_prize, double new_daductRatr, double new_personAmount, double new_totalDeductRate, double new_totalAmount) :
Saleman(new_num, new_name, new_basicSal, new_prize, new_daductRatr, new_personAmount), Manager(new_num, new_name, new_basicSal, new_prize, new_totalDeductRate, new_totalAmount), Employee(new_num, new_name, new_basicSal, new_prize) {
}
void SaleManager::Output4() {
Employee::Show();
Saleman::output2();
Manager::output3();
}
//返回销售经理实发工资
double SaleManager::OutputWage4() {
double salary;
//销售经理实发工资 = 基本工资 + 奖金 + 个人销售额 * 销售员提成比例 + 总销售额 * 经理提成比例
salary = Saleman::OutputWage2() + Manager::OutputWage3() - Employee::OutputWage1();
return salary;
}
void SaleManager::ShowSalary(){
cout << "实发工资:" << OutputWage4() << "元" << endl;
}
int main() {
//员工
Employee e(106, "李明", 1680, 1080); // 定义对象
cout << "员工信息:" << endl; // 输出提示
e.Show(); // 输出基本信息
e.ShowSalary(); // 输出实发工资
cout << "" << endl;
//销售员
Saleman s(108, "李杰明", 2680, 1680, 0.15, 23000); // 定义对象
cout << "销售员信息:" << endl; // 输出提示
s.Output2(); // 输出基本信息
s.ShowSalary(); // 输出实发工资
cout << "" << endl;
//经理
Manager m(116, "吴倩", 3680, 2680, 0.1, 83000); // 定义对象
cout << "经理信息:" << endl; // 输出提示
m.Output3(); // 输出基本信息
m.ShowSalary(); // 输出实发工资
cout << "" << endl;
//销售经理s4
SaleManager sm(118, "吴杰", 3680, 2680, 0.15, 28000, 0.1, 88000); // 定义对象
cout << "销售经理信息:" << endl; // 输出提示
sm.Output4(); // 输出基本信息
sm.ShowSalary(); // 输出实发工资
return 0; // 返回值, 返回操作系统
}