当小学里的上课铃响之后,学生(Student)、教师(Teacher)和校长(Principal)会对同一个消息表现出不同的行为。请设计Person、Student、Teacher以及Principal类,合理安排他们之间的继承关系并将所有类的bellRing()及析构函数设计为虚函数,使得下述代码可以正常执行并产生期望的执行结果。 裁判测试程序样例: #include <iostream> using namespace std; //定义Person, Student, Teacher, Principal类 int main() { cout << "School bell rings..." << endl; Person* persons[3] = {new Student(),new Teacher(),new Principal()}; persons[0]->bellRing(); persons[1]->bellRing(); persons[2]->bellRing(); for (auto i=0;i<3;i++) delete persons[i]; return 0; }
时间: 2023-06-04 12:06:44 浏览: 226
Person类:
- 成员变量:name(姓名)
- 成员函数:构造函数、析构函数、虚函数bellRing()
Student类:
- 继承Person类
- 成员变量:grade(年级)
- 成员函数:构造函数、析构函数、重写虚函数bellRing()
Teacher类:
- 继承Person类
- 成员变量:subject(科目)
- 成员函数:构造函数、析构函数、重写虚函数bellRing()
Principal类:
- 继承Person类
- 成员变量:office(办公室)
- 成员函数:构造函数、析构函数、重写虚函数bellRing()
代码样例:
```c++
#include<iostream>
#include<vector>
using namespace std;
class Person {
protected:
string name;
public:
Person(string n) : name(n) {}
virtual ~Person() {}
virtual void bellRing() {
cout << name << "听到上课铃" << endl;
}
};
class Student : public Person {
private:
int grade;
public:
Student(string n, int g) : Person(n), grade(g) {}
~Student() {}
void bellRing() override {
cout << name << "在" << grade << "年级的同学们,听到上课铃" << endl;
}
};
class Teacher : public Person {
private:
string subject;
public:
Teacher(string n, string s) : Person(n), subject(s) {}
~Teacher() {}
void bellRing() override {
cout << name << "教的" << subject << "课,听到上课铃" << endl;
}
};
class Principal : public Person {
private:
string office;
public:
Principal(string n, string o) : Person(n), office(o) {}
~Principal() {}
void bellRing() override {
cout << name << "在" << office << "听到上课铃" << endl;
}
};
int main() {
vector<Person*> people{ new Student("小明", 2), new Teacher("张老师", "数学"), new Principal("校长", "办公室") };
for (auto p : people) {
p->bellRing();
delete p;
}
return 0;
}
```
输出结果:
```
小明在2年级的同学们,听到上课铃
张老师教的数学课,听到上课铃
校长在办公室听到上课铃
```
阅读全文