题目描述
学生类定义如下:
class Student {
private:
int id;//学号
int score; //成绩
static int maxscore;//最高分数
static int maxid;//最高分数学生学号
public:
Student(int ti=0,int ts=0)
:id(ti), score(ts)
{}
static void findMax(Student & st); //寻找最高成绩和学号
static int getMaxScore(); //返回最高成绩
static int getMaxID();//返回最高成绩的学号
};
输入一组学生学号和成绩,用上述静态成员求最高成绩和对应学号
输入
第一行输入n表示有n个学生
接着输入n行,每行包括两个数据,表示学号和成绩
输出
调用静态成员函数输出学号和最高成绩,格式看样例
输入样例1
3 1002 68 1023 54 1045 32
输出样例1
1002--68
思路分析
主要是静态成员数据和静态成员函数的问题。
静态成员数据必须在类外和主函数外定义,因为类声明只是声明而已,并没有给变量分配内存空间,而静态成员数据必须有定义,而不能只是声明,否则会编译错误,如果静态成员数据在定义时未赋初值,那么系统会自动赋初值为0。
还有就是静态成员数据的修改,只能通过类内定义的成员函数进行修改。
非静态成员可以访问非静态数据和静态数据,但静态数据只能访问静态数据,静态成员函数只能访问类内的静态数据成员,如果要想访问类内非静态数据成员,可以通过类对象来访问。
最后就是找最高成绩,显然不能通过排序的方式,因为题目给定了找最高成绩的成员函数声明,还是个静态成员函数,只能通过一一比较。
AC代码
代码语言:javascript复制#include<iostream>
using namespace std;
class Student
{
private:
int id;//学号
int score; //成绩
static int maxscore;//最高分数
static int maxid;//最高分数学生学号
public:
Student(int ti=0,int ts=0):id(ti), score(ts){}
static void findMax(Student & st); //寻找最高成绩和学号
static int getMaxScore(); //返回最高成绩
static int getMaxID();//返回最高成绩的学号
};
int Student::maxscore=0;
int Student::maxid=0;
void Student::findMax(Student & st)
{
if(st.score>maxscore)
{
maxscore=st.score;
maxid=st.id;
}
}
int Student::getMaxScore()
{
return maxscore;
}
int Student::getMaxID()
{
return maxid;
}
int main()
{
int n,id,score;
cin>>n;
while(n--)
{
cin>>id>>score;
Student st(id,score);
Student::findMax(st);
}
cout<<Student::getMaxID()<<"--"<<Student::getMaxScore()<<endl;
}