Files
some-cpp-files/Practical-Teaching/OPP-in-C++/8/1-1.cpp
T
2024-03-17 22:30:49 +08:00

87 lines
1.6 KiB
C++

// 某学校对教师每月工资的计算规定如下:固定工资+课时补贴;教授每课时50元;副教授每课时30元;讲师每课时20元。定义教师抽象类,派生出不同职称的教师类,编写程序求若干个教师的月工资。
// 职称 等级 每月固定工资(元)
// 教授 一级 8000
// 二级 7500
// 副教授 一级 7000
// 二级 6000
// 三级 5000
// 讲师 4500
#include <bits/stdc++.h>
using namespace std;
class Teacher {
protected:
double fixed_salary;
double class_hour_subsidy;
public:
double calculate_salary(int class_hours) {
return fixed_salary + class_hour_subsidy * class_hours;
}
};
class Professor : public Teacher {
private:
int level;
public:
Professor(int l) : level(l) {
switch (level) {
case 1:
fixed_salary = 8000;
break;
case 2:
fixed_salary = 7500;
break;
default:
fixed_salary = 0;
break;
}
class_hour_subsidy = 50;
}
};
class AssociateProfessor : public Teacher {
private:
int level;
public:
AssociateProfessor(int l) : level(l) {
switch (level) {
case 1:
fixed_salary = 7000;
break;
case 2:
fixed_salary = 6000;
break;
case 3:
fixed_salary = 5000;
break;
default:
fixed_salary = 0;
break;
}
class_hour_subsidy = 30;
}
};
class Lecturer : public Teacher {
public:
Lecturer() {
fixed_salary = 4500;
class_hour_subsidy = 20;
}
};
int main() {
Professor p(1), p2(2);
AssociateProfessor ap(1), ap2(2), ap3(3);
Lecturer l;
Teacher *t[7] = { &p, &p2, &ap, &ap2, &ap3, &l };
for (int i = 0; i < 6; i++) {
cout << t[i]->calculate_salary(10) << endl;
}
return 0;
}