关于#c++实际应用#的问题,如何解决?

1)某学校对教师每月工资的计算规定如下:固定工资+课时补贴。教授的固定工资为5000元,每个课时补贴50元。讲师的固定工资为2500元,每个课时补贴25元。
(2)定义教师抽象类(Teacher),公有派生不同职称的教师类(Professor、Lectuer),编写程序求若干个教师的月工资。
(3)其中教师类包含3个保护数据成员:char name[20];  int coursetime; float salary;
          它们分别是“姓名”、“每月课时数”、“工资”。

img

参考如下代码:

#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;
}