C++ 继承Employee类
生活随笔
收集整理的這篇文章主要介紹了
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类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 出版公司(继承)
- 下一篇: C++ 复数类运算符重载