如本章开篇所述,当小学里的上课铃响之后,学生(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; } 输入样例: 输出样例: School bell rings... I am a student learning in classroom. I am a teacher teaching in classroom. I am the principal inspecting in campus. A student object destroyed. A teacher object destroyed. A principal object destroyed.
时间: 2023-06-06 16:05:36 浏览: 158
这道题要求我们设计一个人员类(Person)以及其子类学生类(Student)、教师类(Teacher)和校长类(Principal),并实现其虚析构函数和虚函数bellRing(),从而让根据铃声表现出不同行为的场景得以实现。
具体实现可能如下:
```
#include <iostream>
using namespace std;
class Person{
public:
virtual void bellRing() {
cout<<"Person: 咚咚咚"<<endl;
}
virtual ~Person(){};
};
class Student: public Person{
public:
void bellRing() override {
cout<<"Student: 走进教室"<<endl;
}
~Student(){};
};
class Teacher: public Person{
public:
void bellRing() override {
cout<<"Teacher: 准备上课"<<endl;
}
~Teacher(){};
};
class Principal: public Person{
public:
void bellRing() override {
cout<<"Principal: 视察校园"<<endl;
}
~Principal(){};
};
int main(){
Person* p;
Student s;
Teacher t;
Principal pr;
p = &s; p->bellRing();
p = &t; p->bellRing();
p = ≺ p->bellRing();
return 0;
}
```
这段代码定义了4个类: Person、Student、Teacher、Principal,其中Person作为基类,其他三个类分别为Person的子类。这些类中都有一个虚函数bellRing(),分别用来表示学生、教师和校长对上课铃响应的行为。Person类和其子类的析构函数都设为了虚函数,以避免内存泄漏。
在主函数中,我们定义了一个Person指针p,并使用&符号将其分别指向了Student、Teacher和Principal类的对象,然后通过调用它们的bellRing()函数,可以实现各自对上课铃的不同响应行为的输出。
阅读全文