#define _CRT_SECURE_NO_WARNINGS //需要忽略scanf返回值的警告时使用
#include
#include
using namespace std;
class Employee {
protected:
string name;
int beginYear;
public:
Employee(string value1, int value2) :name(value1), beginYear(value2) {}
int getBeginYear(void) {
return beginYear;
}
string getName(void) {
return name;
}
double getBasicWage(int currentYear) {
int workYears = currentYear - beginYear + 1;
return 60000 + workYears * 1000;
}
virtual double getPrize(void) = 0;
};
class Saleman :public Employee {
private:
double deductRate;
double personAmount;
public:
Saleman(string value1 = 'CPP', int value2 = 2022, double value3 = 0.1, double value4 = 0.0) :
Employee(value1, value2), deductRate(value3), personAmount(value4) {}
double getDeductRate(void) {
return deductRate;
}
double getPersonAmount(void) {
return personAmount;
}
virtual double getPrize(void) {
return deductRate * personAmount;
}
};
class Manager :public Employee {
private:
double totalDeductRate;
double totalAmount;
public:
Manager(string value1 = 'CPP', int value2 = 2022, double value5 = 0.02, double value6 = 0.0) :
Employee(value1, value2), totalDeductRate(value5), totalAmount(value6) {}
double getTotalDeductRate(void) {
return totalDeductRate;
}
double getTotalAmount(void) {
return totalAmount;
}
virtual double getPrize(void) {
return totalDeductRate * totalAmount;
}
};
int main(void) {
string value1;
int value2;
double value3, value4;
scanf('%s%d%lf%lf', &value1[0], &value2, &value3, &value4);
Saleman s(value1, value2, value3, value4);
scanf('%s%d%lf%lf', &value1[0], &value2, &value3, &value4);
Manager m(value1, value2, value3, value4);
Employee* e = &s;
cout << e->getName() << '2022年的实发工资为' << e->getPrize() + e->getBasicWage(2022) << endl;
e = &m;
cout << e->getName() << '2022年的实发工资为' << e->getPrize() + e->getBasicWage(2022) << endl;
return 0;
}