cpp-静态成员和功能

时间:2016-03-30 13:58:51

标签: c++ static

我有以下两个类似功能的学生班 - 一个是静态的,一个不是。

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

但它不起作用(不编译)

1 个答案:

答案 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.
}

这样,每次输入更高的成绩时,它就会成为新的最高成绩,这样,课程总是知道最高成绩而无需跟踪每个学生的成绩。