-->
当前位置:首页 > 题库 > 正文内容

函数题:类的多继承

Luz3年前 (2022-05-05)题库1037
定义Employee(员工)类,由Employee类分别派生出Saleman(销售员)类、Manager(经理)类,再由Saleman(销售员)类、Manager(经理)类采用多重继承方式派生出新类SaleManager(销售经理)类,各类之间的继承关系如图。

Employee(员工)类中包含数据成员:num(编号)、name(姓名)、basicSalary(基本工资)和prize(奖金);
Saleman(销售员)类中包含deductRate(提成比例)、personAmount(个人销售额);
Manager(经理)类中包含totalDeductRate(经理提成比例),totalAmount(总销售额);
SaleManager(销售经理)类中不再包含其他数据成员。
每个类都有构造函数、输出基本信息(show)函数和输出实发工资(showsalary)函数。
各类人员的实发工资:
员工:实发工资 = 基本工资 + 奖金
销售员:实发工资 = 基本工资 + 奖金 + 提成比例 * 个人销售额
经理:实发工资 = 基本工资 + 奖金 + 经理提成比例 * 总销售额
销售经理:实发工资 = 基本工资 + 奖金 + 提成比例 * 个人销售额 + 经理提成比例 * 总销售额

### 函数接口定义:
c++
SaleManager::SaleManager(string xnum,string xname,double xbasicSalary,double xprize,double xdeductRate,double xpersonAmount,double xtotalDeductRate,double xtotalAmount);


### 裁判测试程序样例:
c++
#include <iostream>
#include <string>
using namespace std;

class Employee
{
protected:
string num,name;
double basicSalary,prize;
public:
Employee(string xnum,string xname,double xbasicSalary,double xprize)
{
num = xnum;
name = xname;
basicSalary = xbasicSalary;
prize = xprize;
}
virtual void Show()
{
cout<<"编号:"<<num<<" ";
cout<<"姓名:"<<name<<" ";
cout<<"基本工资:"<<basicSalary<<" ";
cout<<"奖金:"<<prize<<endl;
}
virtual void ShowSalary()
{
cout<<"员工实发工资:"<<basicSalary + prize<<endl<<endl;
}
};
//虚基类的定义:
//为了解决从不同途径继承来的同名数据成员在内存中有不同拷贝造成数据不一致,
//不同途径继承来的同名数据成员在内存中只有一个拷贝,节省了内存,解决了二义性问题
class Saleman:virtual public Employee
{
protected:
double deductRate,personAmount;
public:
Saleman(string xnum,string xname,double xbasicSalary,double xprize,double xdeductRate,double xpersonAmount)
:Employee(xnum,xname,xbasicSalary,xprize)
{
deductRate = xdeductRate;
personAmount = xpersonAmount;
}
void Show()
{
Employee::Show();
cout<<"销售员提成比例:"<<deductRate<<" ";
cout<<"个人销售额:"<<personAmount<<endl;
}
void ShowSalary()
{
cout<<"销售员实发工资:"<<basicSalary + prize + personAmount * deductRate<<endl<<endl;
}
};
class Manager:virtual public Employee
{
protected:
double totalDeductRate,totalAmount;
public:
Manager(string xnum,string xname,double xbasicSalary,double xprize,double xtotalDeductRate,double xtotalAmount)
:Employee(xnum,xname,xbasicSalary,xprize)
{
totalDeductRate = xtotalDeductRate;
totalAmount = xtotalAmount;
}
void Show()
{
Employee::Show();
cout<<"经理提成比例:"<<totalDeductRate<<" ";
cout<<"总销售额:"<<totalAmount<<endl;
}
void ShowSalary()
{
cout<<"经理实发工资:";
cout<<basicSalary + prize + totalDeductRate * totalAmount<<endl<<endl;
}
};
class SaleManager:public Saleman,public Manager
{//只有虚基类Employee的构造函数被执行一次,最远派生类SaleManager的二个直接基类的构造函数对虚基类的嵌套调用被自动忽略,这样虚基类中的数据成员只会被初始化一次。
public:
SaleManager(string xnum,string xname,double xbasicSalary,double xprize,double xdeductRate,double xpersonAmount,double xtotalDeductRate,double xtotalAmount);
void Show();
void ShowSalary();
};
int main()
{
Employee e("1000","Rose",12000,30000);
Saleman s("1001","Semon",100,300,0.1,1000);
Manager m("1002","David",200,200,0.2,2000);
SaleManager sm("1003","Peter",100,200,0.1,1000,0.2,1000);
Employee *em[4]={&e,&s,&m,&sm};
for(int i=0;i<4;i++)
{
em[i]->Show(); //多态接口,以不变应万变
em[i]->ShowSalary(); //多态接口
}
return 0;
}

/* 请在这里填写答案 */


### 输入样例:

在这里给出一组输入。例如:

in



### 输出样例:

在这里给出相应的输出。例如:

out
编号:1000 姓名:Rose 基本工资:12000 奖金:30000
员工实发工资:42000

编号:1001 姓名:Semon 基本工资:100 奖金:300
销售员提成比例:0.1 个人销售额:1000
销售员实发工资:500

编号:1002 姓名:David 基本工资:200 奖金:200
经理提成比例:0.2 总销售额:2000
经理实发工资:800

编号:1003 姓名:Peter 基本工资:100 奖金:200
销售员提成比例:0.1 个人销售额:1000
经理提成比例:0.2 总销售额:1000
销售经理实发工资:600









答案:若无答案欢迎评论

SaleManager::SaleManager(string xnum,string xname,double xbasicSalary,double xprize,double xdeductRate,double xpersonAmount,double xtotalDeductRate,double xtotalAmount)
:Employee(xnum,xname,xbasicSalary,xprize),
Saleman(xnum,xname,xbasicSalary,xprize,xdeductRate,xpersonAmount),
Manager(xnum,xname,xbasicSalary,xprize,xtotalDeductRate,xtotalAmount) {
}
void SaleManager::Show() {
Employee::Show();
cout<<"销售员提成比例:"<<deductRate<<" ";
cout<<"个人销售额:"<<personAmount<<endl;
cout<<"经理提成比例:"<<totalDeductRate<<" ";
cout<<"总销售额:"<<totalAmount<<endl;
}
void SaleManager::ShowSalary() {
cout<<"销售经理实发工资:";
cout<<basicSalary + prize + totalDeductRate * totalAmount + deductRate * personAmount<<endl<<endl;
}

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。