C++ 继承Employee类
题目描述
定义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类相关推荐
- Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩
Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩 请定义一个Manager类,该类继承Employee类,并定义两个变量及一个构造方法,两个变量:depart ...
- 学习笔记,初学者对继承、接口的习题练习: 模拟给所有员工发工资定义员工Employee类,经理Manager类继承Employee类,职员Clerk类继承Employee类。
继承.接口: 习题要求: 模拟给所有员工发工资. * 定义员工Employee类,经理Manager类继承Employee类,职员Clerk类继承Employee类. * 定义Money接口,定义公司 ...
- python类方法继承_python类的继承
一.概述 面向对象编程 (OOP) 语言的一个主要功能就是"继承".继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 通过继承 ...
- java实验报告之Employee类的设计
一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com Time of completion:2022.12.20 La ...
- 【java面试题】Java面试宝典2013版(超长版),抽象类是否可继承实体类
一. Java基础部分......................................................................................... ...
- Java基础自学第一期——继承与类
Java自学心得第一期 本人大二计算机专业,想在寒假期间把java学过的知识给总结一下,边学习边总结总是好的.希望各位朋友大牛看过之后可以给出意见,欢迎大家一起讨论交流,一起进步.文章内容可参考< ...
- java 继承 意义_Java中继承,类的高级概念的知识点
1.继承含义 在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance). 2.继承的优点 A.代码的可重用性 B.子类可以扩展父 ...
- ThinkPHP子类继承Controller类的注意事项
在实际的开发中,往往有很多子类都继承自同一个父类,然后该父类再继承自框架内置类的需求. 比如: class Init extends Controller{...} class son1 extend ...
- java 继承thread_java线程-创建线程(继承 Thread 类)
1.创建线程的方式 线程创建方式是:继承 Thread 类,重写 run 方法.如下:public class Task extends Thread{ @Override public void r ...
最新文章
- Watir-webdriver处理table
- C++ #pragma comment语法(预处理指令)
- python3.7.2安装包_Win10下python 2.7与python 3.7双环境安装教程图解
- 1.编写程序,打印基本ASCII码表(可印刷32到126)。
- [leveldb] 3.put/delete操作
- python opencv显示图片动态_opencv-python计算机视觉图像处理学习笔记2——打开图片,保存图片,显示图片...
- jersey REST的接口简述
- LinkedList 链表总结
- 计算机网络布线总结,网络综合布线实训总结
- 数据库文件的存放位置
- 产品基础——认识竞品分析
- 计算机上fn按键,笔记本上fn是哪个键fn键功能详解【方法详解】
- H5跳转微信公众号关注页面
- TextView 字体中间加 横划线
- python爬虫百度地图_零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(基础篇)...
- 电影天堂,批量下载,简单实现
- 【N32G457】基于RT-Thread和N32G457的可控电流源
- nav 计算机网络_Wi-Fi 6(802.11ax)解析9:双重NAV技术(Dueling NAVs)
- [ 后端篇 ] 10 - AWS API 返回 Endpoint request time out
- Java开源 ERP与客户管理-Sequoia ERP