0

我想跟踪我系统中的学生数量,所以我的想法是在“ StudentController ”类中创建一个名为“_numOfStudents”的静态数据成员,并使用学生的构造函数增加它,但它不起作用,我移动了将其放入“Student”类中,并在创建 Student 对象时在构造函数的帮助下增加数字。问题是:这不是学生班的事吗?知道有多少学生因此违反了最小特权原则。我能做些什么来更好地跟踪学生对象的数量。

    Student(string firstName, string lastName, int age,vector<float>&subjects)//Student conctructor
{
    SetFirstName(firstName);
    setLastName(lastName);
    SetAge(age);
    SetMarks(subjects);
    this->m_id++;
    StudentController::_numberOfStudents++;
}



    class StudentController//this is where i declared the static data member
{
private:
list<Student> _students;
public:
    static int _numberOfStudents;

    StudentController() {};
    StudentController(list<Student>& st) :_students(st) {};

        }
    }   
};

int StudentController::_numberOfStudents = 0;
4

2 回答 2

1

当您尝试StudentController::_numberOfStudents++;在构造函数中执行操作时,StudentController该类尚未定义,因此编译器不知道该类及其静态成员。

于 2021-12-08T12:31:36.447 回答
1

也许跟踪学生不应该是Student班级本身的角色。相反,它应该是一个单独的Classroom对象的角色:

struct Student;
struct Classroom {
    void add(Student&) {
        m_count++;
    }

    size_t count() const { return m_count; }
private:
    size_t m_count{0};
};

struct Student {
    Student(Classroom& classroom) {
        classroom.add(*this);
    }
};

int main()
{
    Classroom classroom;

    Student alice{classroom};
    Student bob{classroom};

    assert(classroom.count() == 2);
}
于 2021-12-08T12:32:57.453 回答