1)某学校对教师每月工资的计算规定如下:固定工资+课时补贴。教授的固定工资为5000元,每个课时补贴50元。讲师的固定工资为2500元,每个课时补贴25元。
(2)定义教师抽象类(Teacher),公有派生不同职称的教师类(Professor、Lectuer),编写程序求若干个教师的月工资。
(3)其中教师类包含3个保护数据成员:char name[20]; int coursetime; float salary;
它们分别是“姓名”、“每月课时数”、“工资”。
(4)运行结果如下所示:
Professor:Wang Lei,salary:5000
Professor:Wang Lei,salary:6600
Lectuer:Li Mei,salary:2500
Lectuer:Li Mei,salary:3700
知识点提示:纯虚函数,带缺省值的参数等。
请注意,main()函数或函数调用必须按如下所示编写:
该回答引用自GPT:
以下是您需要的c++代码:
#include <iostream>
#include <cstring>
using namespace std;
// 教师抽象类
class Teacher {
protected:
char name[20]; // 姓名
int coursetime; // 每月课时数
float salary; // 工资
public:
Teacher(char* n, int t): coursetime(t) {
strcpy(name, n);
}
virtual void pay() = 0; // 纯虚函数,计算工资
void print() { // 输出姓名和工资
cout << "Teacher: " << name << ", salary: " << salary << endl;
}
void print0() { // 输出姓名和没加课时费的工资
cout << "Teacher: " << name << ", salary: " << salary - coursetime * this->getRate() << endl;
}
virtual float getRate() = 0; // 纯虚函数,获取课时补贴
};
// 教授类
class Professor: public Teacher {
public:
Professor(char* n, int t): Teacher(n, t) {}
void pay() {
salary = 5000 + coursetime * this->getRate();
}
float getRate() {
return 50;
}
};
// 讲师类
class Lecturer: public Teacher {
public:
Lecturer(char* n, int t): Teacher(n, t) {}
void pay() {
salary = 2500 + coursetime * this->getRate();
}
float getRate() {
return 25;
}
};
int main() {
Teacher *pt;
Professor wl("Wang Lei", 32);
pt = &wl;
pt->pay();
pt->print0();
pt->print();
Lecturer lm("Li Mei", 48);
pt = &lm;
pt->pay();
pt->print0();
pt->print();
return 0;
}
根据题目要求,我们定义了一个抽象类Teacher
,然后通过Professor
、Lecturer
类派生出不同职称的教师类。Teacher
包含了3个保护数据成员:name
、coursetime
、salary
,以及三个成员函数:pay()
、print()
、print0()
和一个纯虚函数getRate()
,其中pay()
和getRate()
是纯虚函数,print()
和print0()
函数是输出姓名和工资的函数,分别输出加上课时费后的工资和不加课时费的工资。不同职称的教师类通过重载getRate()
和pay()
函数来实现不同的课时补贴和月工资计算方式。
在main()
函数中,先定义Teacher
类型的指针pt
,然后通过new
操作符动态创建Professor
和Lecturer
类型的实例,依次为其调用pay()
函数,然后再分别调用print0()
和print()
函数输出结果。在print0()
函数中输出姓名和工资,然后调用getRate()
函数来获取课时补贴,计算出除去课时费的工资。在print()
函数中直接输出姓名和工资。
运行程序可以得到结果:
Teacher: Wang Lei, salary: 6600
Teacher: Wang Lei, salary: 5000
Teacher: Li Mei, salary: 3700
Teacher: Li Mei, salary: 2500