6-2 继承和多态(人员、学生) 分数 10 作者 刘骥 单位 重庆大学 请设计人员和学生类,并通过测试程序,具体要求如下: 人员类(Person)是基类,成员包含: 保护成员变量,姓名(name,string类型) 保护成员变量,年龄(age,int类型) 公有构造函数 公有函数display 学生类(Student)从人员类公有继承,成员包含: 私有成员变量,学号(id,string类型) 公有构造函数 公有函数display 测试程序: #include<iostream> #include<string> using namespace std; /* 请在这里填写答案 */ int main(){ Person p("张三",20); p.display(); Student s("李四",18,"0001"); s.display(); p=(Person)s; p.display(); Person *ps=new Student ("王五",20,"0002"); ps->display(); delete ps; return 0; } 测试程序的输入: 测试程序的输出: 人员姓名:张三,年龄:20 学生姓名:李四,年龄:18,学号:0001 人员姓名:李四,年龄:18 学生姓名:王五,年龄:20,学号:0002 提示 输出的逗号和冒号均为英文格式 逗号 , 冒号 : 代码长度限制 16 KB 时间限制 400 ms
时间: 2024-02-07 17:03:02 浏览: 180
西南科技大学Java程序设计与实践 实验三 类的继承与多态的应用
5星 · 资源好评率100%
下面是人员类(Person)和学生类(Student)的实现:
```c++
#include<iostream>
#include<string>
using namespace std;
class Person {
protected:
string name;
int age;
public:
Person(string n, int a):name(n),age(a){}
virtual void display() {
cout<<"人员姓名:"<<name<<",年龄:"<<age<<endl;
}
};
class Student: public Person {
private:
string id;
public:
Student(string n, int a, string i):Person(n,a),id(i){}
void display() {
cout<<"学生姓名:"<<name<<",年龄:"<<age<<",学号:"<<id<<endl;
}
};
```
注意到在 Person 类中,我们将 display 函数声明为虚函数,这样当我们通过一个 Person 类型的指针或引用调用 display 函数时,如果这个指针或引用所指向的是一个 Student 类的对象,那么会调用 Student 类中的 display 函数。这就是多态的体现。
测试程序的输出为:
```
人员姓名:张三,年龄:20
学生姓名:李四,年龄:18,学号:0001
人员姓名:李四,年龄:18
学生姓名:王五,年龄:20,学号:0002
```
其中第三条输出中,p=(Person)s; 是一个向上转型的例子,将 Student 类型的对象 s 转换为 Person 类型,并赋值给 p。由于 s 是 Student 类型的,所以在这个转换过程中,p 只会得到 s 中 Person 类型的部分,也就是姓名和年龄,而学号这个 Student 类型独有的部分会被忽略。然后我们调用 p 的 display 函数,由于 p 的类型是 Person,所以它会调用 Person 类中的 display 函数,输出李四的姓名和年龄。
阅读全文