NKU C++ 高级语言程序设计2-2上机考试 第二题:继承派生多态(A卷)

第二题:继承派生多态(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();


}

本人水平有限,分享仅为学弟学妹提供真题。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值