题目描述:
请定义一个学生Student类作为抽象基类,并派生出CollegeStu(大学生)类和highSchoolStu(高中生)类,要求如下。
1、抽象基类Student类:
有保护成员变量name,age, domicile分别表示姓名(字符串类型),年龄(整型)和户籍所在地(字符串类型),纯虚函数UpdateStu(char*,int)用于更新学生信息,纯虚函数Show()用于显示学生信息。
2、派生类CollegeStu类:
新增成员变量attribute(大学生属性)。常见的大学生有四种(“undergraduate”本科生,“master”硕士生,“doctoral”博士生和”other”其他),重写UpdateStu(char*,int)和Show()函数,修改大学生的户籍所在地和大学生属性,并按要求输出大学生信息,格式为姓名 年龄 大学生属性 籍贯,如TomWang 23 master Tianjin
3、派生类highSchoolStu
新增成员变量score(成绩),重写UpdateStu(char* ,int)和Show()函数,修改高中生的籍贯和成绩属性,并按要求输出高中生信息,格式为姓名 年龄 成绩 籍贯TomWang 23 100 Tianjin
注:以上类根据需要自行添加构造函数,必须使用继承,并使用动态联编的方式体现多态性,否则计0分。
输入:
第一行是大学生的信息,分别是姓名,年龄,大学生属性和籍贯,第二行为修改后的大学生户籍所在地和大学生属性,第三行是高中生信息,分别是姓名,年龄,成绩和籍贯,第四行为修改后的高中生籍贯和成绩。 其中姓名和籍贯为字符串(长度不超过256,无空格),年龄和成绩为整数,大学生属性为数字0(表示本科生),1(表示硕士生),2(表示博士生)或3(表示其他)。
输出:
四行,依次是修改前的大学生信息,修改后大学生信息,修改前的高中生信息,修改后的高中生信息。
样例输入:
WangXiaoyu 19 0 Henan
Beijing 1
TiZhenNan 13 100 Tianjin
Hebei 90
样例输出:
WangXiaoyu 19 undergraduate Henan
WangXiaoyu 19 master Beijing
TiZhenNan 13 100 Tianjin
TiZhenNan 13 90 Hebei
#include <iostream>
#include <cstring>
using namespace std;
// 抽象基类Student
class Student {
protected:
string name;
int age;
string domicile;
public:
// 构造函数,初始化成员变量
Student(string n = "", int a = 0, string d = "") : name(n), age(a), domicile(d) {}
// 纯虚函数,需要在派生类中重写实现
virtual void Show() = 0;
virtual void UpdateStu(char* d, int a) = 0;
};
// 派生类CollegeStu,公有继承自Student
class CollegeStu : public Student {
private:
string attribute; // 新增的成员变量,表示大学生属性
public:
// 构造函数,初始化成员变量
CollegeStu(string n = "", int a = 0, string d = "", string at = "") : Student(n, a, d), attribute(at) {}
// 重写父类的纯虚函数,按需求实现函数体
void Show() {
cout << name << " " << age << " " << attribute << " " << domicile << endl;
}
void UpdateStu(char* d, int a) {
domicile = d;
switch (a) {
case 0:
attribute = "undergraduate";
break;
case 1:
attribute = "master";
break;
case 2:
attribute = "doctoral";
break;
case 3:
attribute = "other";
break;
}
}
};
// 派生类highSchoolStu,公有继承自Student
class highSchoolStu : public Student {
private:
int score; // 新增的成员变量,表示高中生的考试成绩
public:
// 构造函数,初始化成员变量
highSchoolStu(string n = "", int a = 0, string d = "", int s = 0) : Student(n, a, d), score(s) {}
// 重写父类的纯虚函数,按需求实现函数体
void Show() {
cout << name << " " << age << " " << score << " " << domicile << endl;
}
void UpdateStu(char* d, int s) {
domicile = d;
score = s;
}
};
int main() {
string n, d;
int a, b, s;
char c;
// 读入大学生信息,创建CollegeStu对象,并调用UpdateStu函数更新信息
cin >> n >> a >> b >> d;
CollegeStu co_stu(n, a, d, "");
cin >> d >> s;
co_stu.UpdateStu(&d[0], s); // 将字符串转化为字符数组
co_stu.Show(); // 输出修改后的大学生信息
// 读入高中生信息,创建highSchoolStu对象,并调用UpdateStu函数更新信息
cin >> n >> a >> s >> d;
highSchoolStu hs_stu(n, a, d, s);
cin >> d >> s;
hs_stu.UpdateStu(&d[0], s); // 将字符串转化为字符数组
hs_stu.Show(); // 输出修改后的高中生信息
return 0;
}