练习: ·3.某学校对教师每月工资的计算公式如下:固定工资+课时补贴。 教 授的固定工资5000元,每个课时补贴50元; 副教授的固定工资3000元,每个课时补贴30元; 讲师的固定工资2000元,每个课时补贴20元。 设计程序,创建教师的抽象类,派生出各类教师,类中有私有数据课 时数,公有有参构造函数、无参构造函数、计算 工资、显示教师信息 函数,主函数中创建各类教师对象及基类指针,计算各类教师的月工 资并显示输出。 目 W
时间: 2024-03-01 08:54:11 浏览: 60
人教版小学三年级上册数学教案:第3单元测量第4课时练习课.pdf
以下是解题思路和代码示例:
解题思路:
1. 创建一个抽象类 Teacher,包含私有数据成员课时数和公有成员函数有参构造函数、无参构造函数、计算工资和显示教师信息函数。
2. 在 Teacher 类中定义纯虚函数 calculateSalary(),用于计算教师的月工资。
3. 创建三个派生类 Professor、AssociateProfessor 和 Lecturer,分别对应教授、副教授和讲师。
4. 在每个派生类中实现 calculateSalary() 函数,根据不同的课时补贴和固定工资计算教师的月工资。
5. 在 main() 函数中创建各类教师对象及基类指针,计算各类教师的月工资并显示输出。
代码示例:
```
#include <iostream>
using namespace std;
// 创建一个抽象类 Teacher
class Teacher {
protected:
int hours; // 课时数
public:
Teacher() { // 无参构造函数
hours = 0;
}
Teacher(int h) { // 有参构造函数
hours = h;
}
virtual void calculateSalary() = 0; // 纯虚函数
virtual void display() = 0; // 纯虚函数
};
// 创建三个派生类 Professor、AssociateProfessor 和 Lecturer
class Professor : public Teacher {
private:
const int fixedSalary = 5000; // 固定工资
const int hourlyAllowance = 50; // 课时补贴
public:
Professor(int h) : Teacher(h) { // 有参构造函数
}
void calculateSalary() { // 计算教师的月工资
int salary = fixedSalary + hours * hourlyAllowance;
cout << "Professor's monthly salary is " << salary << " yuan." << endl;
}
void display() { // 显示教师信息
cout << "I am a Professor." << endl;
}
};
class AssociateProfessor : public Teacher {
private:
const int fixedSalary = 3000; // 固定工资
const int hourlyAllowance = 30; // 课时补贴
public:
AssociateProfessor(int h) : Teacher(h) { // 有参构造函数
}
void calculateSalary() { // 计算教师的月工资
int salary = fixedSalary + hours * hourlyAllowance;
cout << "Associate Professor's monthly salary is " << salary << " yuan." << endl;
}
void display() { // 显示教师信息
cout << "I am an Associate Professor." << endl;
}
};
class Lecturer : public Teacher {
private:
const int fixedSalary = 2000; // 固定工资
const int hourlyAllowance = 20; // 课时补贴
public:
Lecturer(int h) : Teacher(h) { // 有参构造函数
}
void calculateSalary() { // 计算教师的月工资
int salary = fixedSalary + hours * hourlyAllowance;
cout << "Lecturer's monthly salary is " << salary << " yuan." << endl;
}
void display() { // 显示教师信息
cout << "I am a Lecturer." << endl;
}
};
int main() {
// 创建各类教师对象及基类指针
Professor prof(80);
AssociateProfessor assocProf(60);
Lecturer lec(40);
Teacher* ptr;
// 计算各类教师的月工资并显示输出
ptr = &prof;
ptr->display();
ptr->calculateSalary();
ptr = &assocProf;
ptr->display();
ptr->calculateSalary();
ptr = &lec;
ptr->display();
ptr->calculateSalary();
return 0;
}
```
输出结果:
```
I am a Professor.
Professor's monthly salary is 9000 yuan.
I am an Associate Professor.
Associate Professor's monthly salary is 4800 yuan.
I am a Lecturer.
Lecturer's monthly salary is 2800 yuan.
```
阅读全文