第二题:继承派生多态(A卷)
题目 | #404
题目描述:
请定义一个学生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
解答(PE) :
#include<iostream>
#include<cstring>
using namespace std;
class student{
protected:
char name[255],domicile[255];
int age;
public:
virtual void UpdateStu(char*,int)=0;
virtual void show()=0;
};
class collegestu:public student{
public:
int attribute;
void UpdateStu(char* p,int a){
for(int i=0;i<strlen(p)+1;i++){
domicile[i]=p[i];
}
attribute=a;
}
void show(){
cout<<name<<' '<<age<<' ';
switch(attribute){
case 0:cout<<"undergraduate ";
break;
case 1:cout<<"master ";
break;
case 2:cout<<"doctoral ";
break;
case 3:cout<<"other ";
break;
}
cout<<domicile<<endl;
}
collegestu(char*p,int n,int l,char*q){
for(int i=0;i<strlen(p)+1;i++){
name[i]=p[i];
}
for(int i=0;i<strlen(q)+1;i++){
domicile[i]=q[i];
}
age=n;
attribute=l;
}
};
class highschoolstu:public student{
public:
int score;
void UpdateStu(char* p,int a){
for(int i=0;i<strlen(p)+1;i++){
domicile[i]=p[i];
}
score=a;
}
void show(){
cout<<name<<' '<<age<<' '<<score<<' '<<domicile<<endl;;
}
highschoolstu(char*p,int n,int l,char*q){
for(int i=0;i<strlen(p)+1;i++){
name[i]=p[i];
}
for(int i=0;i<strlen(q)+1;i++){
domicile[i]=q[i];
}
age=n;
score=l;
}
};
int main(){
student*p;
char na[255],dom[255];
int ag,at;
cin>>na>>ag>>at>>dom;
collegestu co(na,ag,at,dom);
p=&co;
p->show();
cin>>dom>>at;
p->UpdateStu(dom,at);
p->show();
cin>>na>>ag>>at>>dom;
highschoolstu hi(na,ag,at,dom);
p=&hi;
p->show();
cin>>dom>>at;
p->UpdateStu(dom,at);
p->show();
}
本人水平有限,分享仅为学弟学妹提供真题。