假设我想创建一个电影数据库软件。
我需要一个具有name,surname,dob,awards等属性的类Actor,它还应该有一个“movie”对象数组。
我还需要类Movie,它将属性作为标题,持续时间,年份,但它也应该有一个“actor”对象的数组。代表电影的演员。
Actor对象需要一个由该actor完成的所有电影的列表,就像电影对象需要一个在其中播放的所有演员的列表一样。 因为它是一个包含另一个的副本,反之亦然,编译器会被卡住。
which would be the right way to represent this situation?
答案 0 :(得分:1)
您可以在课程Actor*
中使用Movie
,在课程Movie*
中使用Actor
。并转发类的声明:
class Actor;
public class Movie { ... Actor* ... }
这在标题中。
在类实现.cpp
中,您可以包含另一个类的头,并使用另一个类的方法。
答案 1 :(得分:0)
在大多数语言中,概念是相同的。正如您所观察到的,您不能在Actors中嵌入“Movie对象列表”,反之亦然,因此请保留每个列表,并以某种方式“引用”其他对象。这可能是使用一些唯一的引用值(例如递增的数字),可用于搜索其他列表或关联容器(例如,在C ++中使用键/值“std :: map”而不是链接列表),或者将引用或(弱)指针直接保持在逻辑链接的对象中....