最高成绩(静态成员)

2023-07-30 09:47:40 浏览数 (2)

题目描述

学生类定义如下:

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;
}

0 人点赞