09-单继承-
题目描述
定义Person类具有姓名、年龄等属性,具有输出基本信息的display函数。
选修《面向对象程序设计》课程的学生在Person类的基础上,派生出子类:免听生和非免听生。子类继承父类成员,新增其他成员、改写display函数。
非免听生具有平时成绩、考试成绩和总评成绩三个属性,总评成绩根据(平时成绩40%+考试成绩60%)计算的结果,85分(包含)以上为A,75分(包含)-85分(不包含)为B,65分(包含)-75分(不包含)为C,60分(包含)-65分(不包含)为D,60分(不包含)以下为F。
免听生只有考试成绩和总评成绩两个属性,总评成绩100%根据考试成绩对应上述等级制成绩。
定义上述类并编写主函数,输入类型符号,若输入R,根据学生基本信息、平时成绩和考试成绩,建立非免听生对象,若输入S,根据学生基本信息、考试成绩,建立免听生对象。计算学生的总评成绩,并输出。
输入
测试次数t
随后每行输入学生类型 相关信息
输出
每个学生基本信息和总评成绩
输入样例
2
R cindy 18 100 100
S sandy 28 59
cindy 18 A
sandy 28 F
免听生类的命名不可以用free,因为free是系统内置函数
#include<iostream>
#include<string>
using namespace std;
class person
{
protected:
string name;
int age;
int grade;//最终成绩
public:
person();
person(string n,int a):name(n),age(a){};
char Final()
{
if(grade>=85)
return 'A';
else if(grade>=75)
return 'B';
else if(grade>=65)
return 'C';
else if(grade>=60)
return 'D';
else
return 'F';
}
void display()
{cout<<name<<" "<<age<<endl;}
};
class Free:public person
{
int test;//考试成绩
public:
Free();
Free(string n,int a,int t):person(n,a),test(t){};
void display()
{
grade=test;
cout<<name<<" "<<age<<" "<<Final()<<endl;
}
};
class notfree:public person
{
int usual,test;
public:
notfree();
notfree(string n,int a,int u,int t):person(n,a),usual(u),test(t){};
void display()
{
grade=0.4*usual+0.6*test;
cout<<name<<" "<<age<<" "<<Final()<<endl;
}
};
int main()
{
int t,usual,test,age;
string name;
char person;
cin>>t;
while(t--)
{
cin>>person;
if(person=='R')
{
cin>>name>>age>>usual>>test;
notfree nf(name,age,usual,test);
nf.display();
}
else if(person=='S')
{
cin>>name>>age>>test;
Free f(name,age,test);
f.display();
}
}
return 0;
}
653

被折叠的 条评论
为什么被折叠?



