Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c+;中实现两个类之间的关联+;?_C++_Oop - Fatal编程技术网

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

C++ 如何在c+;中实现两个类之间的关联+;?,c++,oop,C++,Oop,这三个阶级之间的关系是这样的 学生每学期选修一门课。这门课对这学期来说并不特殊。学生可以在任何学期选择。这是这些物体之间的三元关系 这三类之间存在着三元关联。如何实现这三个类之间的关联?或者,一般来说,实现类之间的关联的方法有哪些(C++或java)? 一种方式可以是集装箱船,即将另一类的对象作为一个类的成员。e、 g.(假设一名学生修5门课程) 有许多方法可以实现关联。在您的情况下,您可以: class student{ //other members course courseLi

这三个阶级之间的关系是这样的

学生每学期选修一门课。这门课对这学期来说并不特殊。学生可以在任何学期选择。这是这些物体之间的三元关系


这三类之间存在着三元关联。如何实现这三个类之间的关联?或者,一般来说,实现类之间的关联的方法有哪些(C++或java)? 一种方式可以是集装箱船,即将另一类的对象作为一个类的成员。e、 g.(假设一名学生修5门课程)


有许多方法可以实现关联。在您的情况下,您可以:

class student{
  //other members
  course courseList[5];
};
班级学生{
};
班级课程{
性病:病媒学生;
};
班级学期{
矢量课程;
};

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

如果没有更多细节,很难说清楚,但从现实生活中的例子可以想象,有些课程是在一个学期内开设的,有些学生会选修一些课程。
学生
班级不需要知道任何关于
课程
s的信息,而
课程
班级也不需要知道任何关于
学生
的信息。两人都不需要了解
学期
s。一篇自然的作文是给一个
学期
一张
课程的地图
给一个
学生
的列表:

class student {
};

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

class semester {
   std::vector<course> courses;
};
班级学期
{
公众:
//访问者:课程列表、学生列表、学生列表
//一个给定的课程…都可以从地图上获得。
私人:
地图注册;
};

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

在这种情况下,我的建议是将学期作为课程描述的一部分。然后看看如何使用
多重映射将学生与学期特定课程相结合


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

这实际上取决于这些类如何交互的细节。但总的来说,保持低耦合。投票结束不是建设性的,因为没有进一步的需求规范,这个问题就太模糊了。
class student {
};

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

class semester {
   std::vector<course> courses;
};
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;
};