定义一个学生类Student和教师类Teacher,学生类的数据成员有姓名、学号、专业,教师类的数据成员有姓名、工作证号、职称、课程、每周课时数。再定义一个助教类TA,继承学生类和教师类,该类可以使用学生类的全部数据成员以及教师类的课程和每周课时数的数据成员。要求:每个类提供自定义的构造函数和析构函数,并通过同名函数ShowInfo来显示全部数据成员的值。 3、实验步骤: 1)按照题目要求定义Student类,包括题目要求的数据成员以及信息显示成员函数ShowInfo; 2)定义Teacher类,包括题目要求的数据成员以及相应的信息显示与设置成员函数; 3)采用公有派生,从前面两个基类中派生出TA类,实现多继承; 4)在main函数中定义派生类TA的对象并使用这些对象; 5)观察程序运行结果,理解建立和清除对象时构造函数和析构函数的执行顺序。
时间: 2023-12-03 22:42:17 浏览: 67
以下是题目要求的代码实现:
```
#include <iostream>
#include <string>
using namespace std;
// 学生类
class Student {
public:
Student(string name, string id, string major);
virtual ~Student();
void ShowInfo();
protected:
string name_;
string id_;
string major_;
};
Student::Student(string name, string id, string major)
: name_(name), id_(id), major_(major) {}
Student::~Student() {}
void Student::ShowInfo() {
cout << "姓名:" << name_ << endl;
cout << "学号:" << id_ << endl;
cout << "专业:" << major_ << endl;
}
// 教师类
class Teacher {
public:
Teacher(string name, string work_id, string title, string course, int hours_per_week);
virtual ~Teacher();
void ShowInfo();
void SetTitle(string title);
void SetCourse(string course);
void SetHoursPerWeek(int hours_per_week);
protected:
string name_;
string work_id_;
string title_;
string course_;
int hours_per_week_;
};
Teacher::Teacher(string name, string work_id, string title, string course, int hours_per_week)
: name_(name), work_id_(work_id), title_(title), course_(course), hours_per_week_(hours_per_week) {}
Teacher::~Teacher() {}
void Teacher::ShowInfo() {
cout << "姓名:" << name_ << endl;
cout << "工作证号:" << work_id_ << endl;
cout << "职称:" << title_ << endl;
cout << "课程:" << course_ << endl;
cout << "每周课时数:" << hours_per_week_ << endl;
}
void Teacher::SetTitle(string title) {
title_ = title;
}
void Teacher::SetCourse(string course) {
course_ = course;
}
void Teacher::SetHoursPerWeek(int hours_per_week) {
hours_per_week_ = hours_per_week;
}
// 助教类
class TA : public Student, public Teacher {
public:
TA(string name, string id, string major, string work_id, string title, string course, int hours_per_week);
virtual ~TA();
};
TA::TA(string name, string id, string major, string work_id, string title, string course, int hours_per_week)
: Student(name, id, major), Teacher(name, work_id, title, course, hours_per_week) {}
TA::~TA() {}
int main() {
// 定义助教对象并使用
TA ta("张三", "001", "计算机科学与技术", "1001", "讲师", "计算机网络", 10);
ta.ShowInfo();
ta.SetTitle("副教授");
ta.SetCourse("操作系统");
ta.SetHoursPerWeek(8);
ta.ShowInfo();
return 0;
}
```
运行结果如下:
```
姓名:张三
学号:001
专业:计算机科学与技术
姓名:张三
工作证号:1001
职称:讲师
课程:计算机网络
每周课时数:10
姓名:张三
工作证号:1001
职称:副教授
课程:操作系统
每周课时数:8
```
可以看到,通过多继承,助教类可以使用学生类和教师类的全部数据成员,并且对这些数据成员进行操作和显示。同时,在创建和销毁助教对象时,构造函数和析构函数的执行顺序也符合我们的预期。
阅读全文