如何在c ++中实现两个类之间的关联?

时间:2013-03-07 07:01:07

标签: c++ oop

class student { *attributes* } ;
class course {  } ;
class semester { } ;

这三个类之间的关系是这样的              UML Diagram of student , course , semester

学生在一个学期上课。课程并不特定于学期。它可以由学生在任何学期选择。所以,这是这些对象之间的三元关系。

这三个类之间存在三元关联。如何实现这三个类之间的关联?或者,一般来说,实现类之间关联的可能方式是什么(在c ++或java中)?

4 个答案:

答案 0 :(得分:2)

实现关联的方法有很多种。在你的情况下,你可以逃脱:

class student {
};

class course {
   std::vector<student> students;
};

class semester {
   std::vector<course> courses;
};

在更复杂的情况下,您可能需要复杂的数据结构,树或哈希表来表示关系。

答案 1 :(得分:2)

没有更多细节很难说,但从现实生活中的例子可以想象,有些课程是在一学期内完成的,而有些学生则选修一些课程。 student类不需要了解course的任何内容,course类不需要了解students的任何内容。也不需要知道semester s。一个自然的组合是将semester course的地图提供给student的列表:

class semester 
{
 public:
  // accessors: list of courses, list of students, list of students for 
  // a given course... all obtainable from map.
 private:
  std::map<course, std::set<student>> enrollment;
};

在这里,我为学生使用std::set,因为学生在每门课程中都是独一无二的。同样对于std::map:课程在一学期中是独一无二的。当然,这些约束可以在其他非唯一数据结构之上手动应用。

答案 2 :(得分:0)

一种方式可能是集装箱运输,即将另一个类的对象作为一个类的成员。例如(假设学生需要5门课程)

class student{
  //other members
  course courseList[5];
};

答案 3 :(得分:0)

我在这种情况下的建议是让学期成为课程描述的一部分。然后看看使用multimap将学生与学期特定课程结合起来。

对于关系数据库来说,这几乎听起来是一个很好的问题,根据应用程序的不同,您可能希望将数据关系转移到数据库。