我有以下学生班,创建一个学生,然后允许我将该学生存储在学生班级矢量中。我现在想要一个课程向量,允许每个学生拥有自己参加的课程分组。我希望这些课程能够指向拥有这些课程的学生,这样当学生从学生名单中删除时,他们的课程也会被删除。理想情况下,我希望将这些课程作为学生班级的私人成员,这样只有在指定拥有这些课程的特定学生时,才能访问/修改这些课程。
主:
#include <iostream>
#include <string>
#include "student.h"
#include "students.h"
using namespace std;
int main(){
Students stuList;
Student* bob = new Student ("Bob" "Jones" 10000909);
stuList.add(bob);
return 0;
}
学生h:
#include <ostream>
#include <string>
class Student {
public:
Student::Student(const string & FName, const string & LName, const int ID);
private:
string first;
string last;
int id;
};
学生h:
#include <ostream>
#include <vector>
#include "student.h"
#include <string>
using namespace std;
class Students {
public:
Students();
void add(Student & aStudent);
private:
vector<Student*> collection;
};
我一直在考虑如何实现这一目标,我正在画一个空白。任何建议/提示将受到高度赞赏。
答案 0 :(得分:1)
在Student课程中,您可以添加一个包含学生所拥有的课程的向量,另外还有一个向量用于所参加的课程组:
class Student {
...
vector<Course*> ownedCourses;
vector<Course*> attendedCourses;
};
然后在课程中,您将需要一个包含本课程所有参加者的载体:
class Course {
...
vector<Student*> attendants;
};
如果你现在从你的名单中删除了一个stundent,你也将从其他学生的名单中获得他所拥有的所有课程:
vector<Course*> ownedCourses = studentToRemove.getOwnedCourses();
for (const Course* course : ownedCourses)
{
vector<Student*> attendants = course->getStudents();
for(const Student* student : attendants) {
student->removeAttendedCourse(course);
}
}