C ++:创建一个指向类对象的向量

时间:2017-10-29 00:13:52

标签: c++

我有以下学生班,创建一个学生,然后允许我将该学生存储在学生班级矢量中。我现在想要一个课程向量,允许每个学生拥有自己参加的课程分组。我希望这些课程能够指向拥有这些课程的学生,这样当学生从学生名单中删除时,他们的课程也会被删除。理想情况下,我希望将这些课程作为学生班级的私人成员,这样只有在指定拥有这些课程的特定学生时,才能访问/修改这些课程。

主:

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

};

我一直在考虑如何实现这一目标,我正在画一个空白。任何建议/提示将受到高度赞赏。

1 个答案:

答案 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);
    }
}