定义一个抽象类Human,有数据成员姓名name、地址address和年龄age,纯虚函数display。从类Human派生出类Student,有数据成员学号ID,成员函数display用来显示数据成员信息。从类Human派生出类Teacher,有数据成员电话telephone,成员函数display用来显示数据成员信息。其中要求写出所有类的构造函数,拷贝构造函数。在主函数中测试多态。
时间: 2024-02-25 19:59:06 浏览: 140
好的,我来为您解答。以下是代码实现:
```c++
#include<iostream>
#include<string>
using namespace std;
class Human{
protected:
string name;
string address;
int age;
public:
Human(string n, string a, int ag) : name(n), address(a), age(ag){}
Human(const Human& h) : name(h.name), address(h.address), age(h.age){}
virtual void display() = 0;
};
class Student : public Human{
private:
string ID;
public:
Student(string n, string a, int ag, string id) : Human(n, a, ag), ID(id){}
Student(const Student& s) : Human(s), ID(s.ID){}
void display(){
cout<<"Name: "<<name<<endl;
cout<<"Address: "<<address<<endl;
cout<<"Age: "<<age<<endl;
cout<<"Student ID: "<<ID<<endl;
}
};
class Teacher : public Human{
private:
string telephone;
public:
Teacher(string n, string a, int ag, string tel) : Human(n, a, ag), telephone(tel){}
Teacher(const Teacher& t) : Human(t), telephone(t.telephone){}
void display(){
cout<<"Name: "<<name<<endl;
cout<<"Address: "<<address<<endl;
cout<<"Age: "<<age<<endl;
cout<<"Telephone: "<<telephone<<endl;
}
};
int main(){
Human* h[3];
h[0] = new Student("Tom", "Beijing", 18, "20210001");
h[1] = new Teacher("Alice", "Shanghai", 35, "13888888888");
h[2] = new Student("Jerry", "Guangzhou", 20, "20200001");
for(int i = 0; i < 3; i++){
h[i]->display();
cout<<endl;
}
for(int i = 0; i < 3; i++){
delete h[i];
}
return 0;
}
```
在上述代码中,Human 是一个抽象类,包含三个数据成员和一个纯虚函数 display,Student 和 Teacher 都是从 Human 派生出来的类,分别增加了各自的数据成员和成员函数 display。在主函数中,创建了一个 Human 类型的指针数组,用三个不同的子类对象分别初始化,然后通过循环依次调用每个对象的 display 函数,实现了多态。最后释放指针数组中的内存,避免内存泄漏。
阅读全文