题目描述

定义Employee(员工)类,由Employee分别派生出Saleman(销售员)类和Manager(经理)类,采用虚继承方式。再由Saleman(销售员)类和Manager(经理)类采用多重继承方式派生出新类SaleManager(销售经理)类。
要求:
(1)在Employee类中包含的数据成员有编号(num)、姓名(name)、基本工资(basicSalary)和奖金(prize)。在Saleman类中还包含数据成员销售员提成比例(deductRate)和个人销售额(personAmount),在Manager类中还包含数据成员经理提成比例(totalDeductRate)和总销售额(totalAmount)。在SaleManager类中不包含其它数据成员。
(2)各类人员的实发工资公式如下:
员工实发工资=基本工资+奖金;
销售员实发工资=基本工资+奖金+个人销售额销售员提成比例;
经理实发工资=基本工资+奖金+总销售额
经理提成比例;

销售经理实发工资=基本工资+奖金+个人销售额销售员提成比例+总销售额经理提成比例;

(3)每个类都有构造函数、输出基本信息(Show)函数和输出实发工资(ShowSalary)函数。

输入样例

//本题没有输入,主函数按照如下编写
int main()
{   Employee e(106, "李明", 1680, 1080);    // 定义对象cout << "员工信息:" << endl;   // 输出提示e.Show();            // 输出基本信息e.ShowSalary();        // 输出实发工资Saleman s(108, "李杰明", 2680, 1680, 0.15, 23000);  // 定义对象cout << endl << "销售员信息:" << endl;        // 输出提示s.Show();            // 输出基本信息s.ShowSalary();        // 输出实发工资Manager m(116, "吴倩", 3680, 2680, 0.1, 83000);    // 定义对象cout << endl << "经理信息:" << endl;         // 输出提示m.Show();            // 输出基本信息m.ShowSalary();        // 输出实发工资SaleManager sm(118, "吴杰", 3680, 2680, 0.15, 28000, 0.1, 88000);cout << endl << "销售经理信息:" << endl;        // 输出提示sm.Show();           // 输出基本信息sm.ShowSalary();       // 输出实发工资return 0;                  // 返回值, 返回操作系统
}

输出样例

员工信息:
编号:106
姓名:李明
基本工资:1680元
奖金:1080元
实发工资:2760元销售员信息:
编号:108
姓名:李杰明
基本工资:2680元
奖金:1680元
销售员提成比例:0.15
个人销售额:23000元
实发工资:7810元经理信息:
编号:116
姓名:吴倩
基本工资:3680元
奖金:2680元
经理提成比例:0.1
总销售额:83000元
实发工资:14660元销售经理信息:
编号:118
姓名:吴杰
基本工资:3680元
奖金:2680元
销售员提成比例:0.15
个人销售额:28000元
经理提成比例:0.1
总销售额:88000元
实发工资:19360元

程序代码

#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;//销售经理s4SaleManager sm(118, "吴杰", 3680, 2680, 0.15, 28000, 0.1, 88000);  // 定义对象cout << "销售经理信息:" << endl; // 输出提示sm.Output4();                                // 输出基本信息sm.ShowSalary();   // 输出实发工资return 0;   // 返回值, 返回操作系统
}

C++ 继承Employee类相关推荐

  1. Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩

    Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩 请定义一个Manager类,该类继承Employee类,并定义两个变量及一个构造方法,两个变量:depart ...

  2. 学习笔记,初学者对继承、接口的习题练习: 模拟给所有员工发工资定义员工Employee类,经理Manager类继承Employee类,职员Clerk类继承Employee类。

    继承.接口: 习题要求: 模拟给所有员工发工资. * 定义员工Employee类,经理Manager类继承Employee类,职员Clerk类继承Employee类. * 定义Money接口,定义公司 ...

  3. python类方法继承_python类的继承

    一.概述 面向对象编程 (OOP) 语言的一个主要功能就是"继承".继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 通过继承 ...

  4. java实验报告之Employee类的设计

    一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com Time of completion:2022.12.20 La ...

  5. 【java面试题】Java面试宝典2013版(超长版),抽象类是否可继承实体类

    一. Java基础部分......................................................................................... ...

  6. Java基础自学第一期——继承与类

    Java自学心得第一期 本人大二计算机专业,想在寒假期间把java学过的知识给总结一下,边学习边总结总是好的.希望各位朋友大牛看过之后可以给出意见,欢迎大家一起讨论交流,一起进步.文章内容可参考< ...

  7. java 继承 意义_Java中继承,类的高级概念的知识点

    1.继承含义 在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance). 2.继承的优点 A.代码的可重用性 B.子类可以扩展父 ...

  8. ThinkPHP子类继承Controller类的注意事项

    在实际的开发中,往往有很多子类都继承自同一个父类,然后该父类再继承自框架内置类的需求. 比如: class Init extends Controller{...} class son1 extend ...

  9. java 继承thread_java线程-创建线程(继承 Thread 类)

    1.创建线程的方式 线程创建方式是:继承 Thread 类,重写 run 方法.如下:public class Task extends Thread{ @Override public void r ...

最新文章

  1. Watir-webdriver处理table
  2. C++ #pragma comment语法(预处理指令)
  3. python3.7.2安装包_Win10下python 2.7与python 3.7双环境安装教程图解
  4. 1.编写程序,打印基本ASCII码表(可印刷32到126)。
  5. [leveldb] 3.put/delete操作
  6. python opencv显示图片动态_opencv-python计算机视觉图像处理学习笔记2——打开图片,保存图片,显示图片...
  7. jersey REST的接口简述
  8. LinkedList 链表总结
  9. 计算机网络布线总结,网络综合布线实训总结
  10. 数据库文件的存放位置
  11. 产品基础——认识竞品分析
  12. 计算机上fn按键,笔记本上fn是哪个键fn键功能详解【方法详解】
  13. H5跳转微信公众号关注页面
  14. TextView 字体中间加 横划线
  15. python爬虫百度地图_零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(基础篇)...
  16. 电影天堂,批量下载,简单实现
  17. 【N32G457】基于RT-Thread和N32G457的可控电流源
  18. nav 计算机网络_Wi-Fi 6(802.11ax)解析9:双重NAV技术(Dueling NAVs)
  19. [ 后端篇 ] 10 - AWS API 返回 Endpoint request time out
  20. Java开源 ERP与客户管理-Sequoia ERP

热门文章

  1. 通过style来控制隔行显示不同颜色 .
  2. Dev控件使用 - 皮肤
  3. HDLC和 PPP的实验
  4. 实训C++语言设计——实现复数运算
  5. struts2访问session的两种方法
  6. myeclipse的buildpath 和lib引入的区别
  7. Apache Spark学习:利用Eclipse构建Spark集成开发环境
  8. C++的三大特性:封装,继承,多态
  9. C++11 的新特性
  10. ping的实现和代码分析