我有以下两个类似功能的学生班 - 一个是静态的,一个不是。
class Student
{
public:
Student(std::string name_ , int const id_);
virtual ~Student();
void addGrade(int const grade2add);//grade above 100
void removeGrade (int const grade2remove); //update maxGrade
void print(); //id, name, grades
int getStudentMaxGrade();
static int getMaxGrade();
private:
std::string name; //max 20 chars
int const id; //5 digits, only digits
std::vector<int> grades;
float avg;
static int maxGrade;
};
static int maxGrade
初始化为0。
我实现了这个功能:
int Student::maxGrade = 0;
int Student::getStudentMaxGrade()
{
return *max_element(grades.begin(), grades.end());
}
我不确定如何实现静态功能。 我试过了:
int Student::getMaxGrade()
{
maxGrade= *max_element(grades.begin(), grades.end());
return maxGrade;
}
但它不起作用(不编译)
答案 0 :(得分:1)
您的数据布局方式,每个学生对其他学生的成绩一无所知,课程对任何特定学生的成绩一无所知。这是一个很好的封装,但为了检索所有学生的最高成绩,你必须包含一些逻辑来跟踪已输入的最高成绩。像这样:
void Student::addGrade (int const grade) {
// do the stuff, add the grade
if (grade > maxGrade) // Check if the grade is higher than the previous
maxGrade = grade; // highest recorded grade and, if so, overwrite it.
}
这样,每次输入更高的成绩时,它就会成为新的最高成绩,这样,课程总是知道最高成绩而无需跟踪每个学生的成绩。