关于#c++虚函数#的问题,如何解决?

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()函数或函数调用必须按如下所示编写:

img

该回答引用自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,然后通过ProfessorLecturer类派生出不同职称的教师类。Teacher包含了3个保护数据成员:namecoursetimesalary,以及三个成员函数:pay()print()print0()和一个纯虚函数getRate(),其中pay()getRate()是纯虚函数,print()print0()函数是输出姓名和工资的函数,分别输出加上课时费后的工资和不加课时费的工资。不同职称的教师类通过重载getRate()pay()函数来实现不同的课时补贴和月工资计算方式。

main()函数中,先定义Teacher类型的指针pt,然后通过new操作符动态创建ProfessorLecturer类型的实例,依次为其调用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