1)某学校对教师每月工资的计算规定如下:固定工资+课时补贴。教授的固定工资为5000元,每个课时补贴50元。讲师的固定工资为2500元,每个课时补贴25元。
(2)定义教师抽象类(Teacher),公有派生不同职称的教师类(Professor、Lectuer),编写程序求若干个教师的月工资。
(3)其中教师类包含3个保护数据成员:char name[20]; int coursetime; float salary;
它们分别是“姓名”、“每月课时数”、“工资”。
参考如下代码:
#include <iostream>
#include <string>
using namespace std;
// 教师抽象类
class Teacher {
protected:
string name;
int coursetime;
float salary;
public:
Teacher(const string& n, int ct) : name(n), coursetime(ct) {}
virtual ~Teacher() {}
virtual void pay() = 0; // 纯虚函数
virtual void print() = 0; // 纯虚函数
};
// 教授类
class Professor : public Teacher {
public:
Professor(const string& n, int ct) : Teacher(n, ct) {
salary = 5000;
}
void pay() override {
salary = salary + coursetime * 50;
}
void print() override {
cout << "Professor:" << name;
cout << ",salary:" << salary << endl;
}
};
// 讲师类
class Lectuer : public Teacher {
public:
Lectuer(const string& n, int ct) : Teacher(n, ct) {
salary = 2500;
}
void pay() override {
salary = salary + coursetime * 25;
}
void print() override {
cout << "Lectuer:" << name;
cout << ",salary:" << salary << endl;
}
};
int main() {
Teacher *pt;
Professor wl("Wang Lei", 32);
pt=&wl;
pt->print(); // 输出姓名与没加课时费的工资
pt->pay(); // 计算工资
pt->print(); // 输出姓名和工资
Lectuer lm("Li Mei", 48);
pt=&lm;
pt->print(); // 输出姓名与没加课时费的工资
pt->pay(); // 计算工资
pt->print(); // 输出姓名和工资
return 0;
}
#include <iostream>
#include <string.h>
using namespace std;
// 类申明
// 教师抽象类
class Teacher {
protected:
char name[20];
int coursetime;
float salary;
public:
virtual void print() = 0;
virtual void pay() = 0;
Teacher(const char *personName, const int courseTime);
};
// 教授类
class Professor : public Teacher {
public:
Professor(const char *personName, const int courseTime);
void print() override;
void pay() override;
};
// 讲师类
class Lectuer : public Teacher {
public:
Lectuer(const char *personName, const int courseTime);
void print() override;
void pay() override;
};
// 类实现
Teacher::Teacher(const char *personName, const int courseTime) {
if (personName != NULL) {
int len = strlen(personName);
len = len >= 20 ? 19 : len;
strncpy(name, personName, len);
}
coursetime = courseTime;
}
void Teacher::print() {
cout << name << "," << salary << endl;
}
Professor::Professor(const char *personName, const int courseTime) : Teacher(personName, courseTime) {
salary = 5000;
}
void Professor::print() {
cout << "Professor:";
Teacher::print();
}
void Professor::pay() {
salary = salary + (50 * coursetime);
}
Lectuer::Lectuer(const char *personName, const int courseTime) : Teacher(personName, courseTime) {
salary = 2500;
}
void Lectuer::print() {
cout << "Lectuer:";
Teacher::print();
}
void Lectuer::pay() {
salary = salary + (25 * coursetime);
}
int main() {
Teacher *pt;
Professor wl("Wang Lei", 32);
pt = &wl;
pt->print();
pt->pay();
pt->print();
Lectuer lm("Li Mei", 48);
pt = &lm;
pt->print();
pt->pay();
pt->print();
return 0;
}