设计一个Grade类,判定学生某个考试的级别,全部操作在类Grade中实现。要求:
(1)在定义对象时指定学生姓名和分数。且姓名必须指定,分数可缺省,缺省值为0分。要求包含构造函数、复制构造函数、姓名用string类型来定义。
主函数中实例化6个学生对象的姓名和分数分别为:
Sun l00
Wu 90
Jiang 52
Zhou 0
He 76
Liu 88
(2) 编写一个私有成员函数getGrade(),判定学生成绩的等级(60分以下为E等,[60-70)分为D等,[70-80)为C等,[80-90)为B等,[90-100]分为A等)。
(3)编写一个常成员函数getInfo()输出结果,包含学生姓名、分数、等级。
(4)定义静态数据成员count,用于统计总的学生人数,并在主函数中输出。
(5)定义该类的友元函数compare(Grade &m,Grade &n),比较两个学生成绩的高低,输出成绩高的那个学生信息。
实验思路:首先定义一个类,按照题意将所需的函数成员和数据成员声明好,然后在类外实现,注意静态数据成员要在类外初始化,调用时用类名调用,定义一个私有成员函数getGrade()时,记得考虑100分的情况。
#include <iostream>
#include<string>
using namespace std;
class Grade{
//类内的声明
public:
Grade(){}
Grade(string name1,int score1=0);//构造函数 ,调用一次count值加1
Grade(Grade& m); //复制构造函数
~Grade(){count--;} //析构函数,调用一次count值减1
static int getcount(); //公有接口,输出count
string getname()const; //公有接口 ,输出name
int getscore()const; //公有接口,输出score
char getGrade0()const; //公有接口,输出学生的等级
void getlnfo()const; //输出结果:包含学生的姓名、分数、等级
friend void compare(Grade &m,Grade &n);//类的友元函数,比较两个学生成绩的高低,输出成绩高的那个学生信息。
private:
static int count; //静态数据成员,用于统计学生的人数
int score; //学生成绩
string name; //学生姓名
char getGrade()const;//判定学生的等级
};
//类外的实现
int Grade::count = 0; //静态数据成员,用于统计学生的人数,初始值定义为0
Grade::Grade(string name1,int score1):name(name1),score(score1)
{count++;}
Grade::Grade(Grade& m):name(m.name),score(m.score){}
int Grade::getcount(){return count;}
string Grade::getname()const{return name;}
int Grade::getscore()const{return score;}
char Grade::getGrade0()const{
return getGrade();
}
void compare(Grade &m,Grade &n){
cout << "这两个学生中成绩较高的学生的姓名、分数、等级为 ";
if(m.score>n.score)
cout << m.name << " " << m.score << " " << m.getGrade() << endl;
else
cout << n.name << " " << n.score << " " << n.getGrade() << endl;
}
void Grade::getlnfo()const{
cout << "学生的姓名、分数、等级分别是 ";
cout << name << " " << score << " " << getGrade() << endl;
}
char Grade::getGrade()const{
int j = score/10;
switch(j)
{
case 10:return 'A';break;
case 9:return 'A';break;
case 8:return 'B';break;
case 7:return 'C';break;
case 6:return 'D';break;
default: return 'E';break;
}
}
int main() {
Grade a("Sun",100); //定义a对象
a.getGrade0(); //得到a学生的等级
a.getlnfo(); //得到a学生的姓名、分数、等级
Grade b("Wu",90); //定义b对象
compare(a,b); //比较a和b两个人的成绩,并输出成绩高的那个学生的信息
Grade c("Jiang",52);
Grade d("Zhou",0);
Grade e("He",76);
Grade f("Liu",88); //共定义了六个学生的信息
cout << "学生的总人数为";
cout << Grade::getcount() << endl;
return 0;
}