0

我正在为我的系统编程课程做作业。我必须实施大学模拟。我有一个 Course 抽象类和它的子类 ComputerScienceCourse (以及一堆其他不影响我要问的子类)。我有一个 Student 抽象类和它的子类 ComputerScienceStudent (以及一堆不影响我要问的其他子类)。在 ComputerScienceCourse 子类中有一个函数:

void teach(){
 for(i = all students that take this course [stored in a vector of pointers to Student objects, which is a member field of the CSCourse child class, called students]){
  this->students.at(i)->study(*this);
 }
}

该函数调用所有上过这门课的学生的学习函数。该函数是子类 CSStudent 的成员函数

void study(Course &c){
 if(this->failedclass){
  c.removeStudent(this)
 }
}

现在,当我检查输出时,教学函数中的循环不会为其中的所有学生调用学习函数。例如,如果我有 4 个学生在做这门课,有时它会只调用前三个的学习函数,有时它会调用第一个和最后一个学生的函数......变化。什么可能导致 for 循环不调用所有学生的学习函数?!以下是教学功能的完整代码:

    for(unsigned int i=0; i<this->studentMembers.size(); i++){

    this->studentMembers.at(i)->study(*this);

}
4

1 回答 1

1

问题似乎是,当学生未能通过课程时,向量的内容会被修改。在迭代其内容时从向量中删除内容很难正确处理。似乎这里更合适的数据模型会让教师删除不及格的学生,这也会使这个问题更容易处理。所以教大家,然后再过一遍名单,把不及格的学生删掉。

于 2012-11-15T17:00:15.707 回答