взаимная ссылка между классами в переполнении стека

Во многих случаях вполне естественно, что экземпляры двух или более классов, наиболее вероятно те, которые совместно используют файл заголовка, будут ссылаться друг на друга по указателям. например, в графе ребро должно ссылаться на свои вершины и наоборот. одна только взаимная ссылка может быть сделана с помощью предварительного объявления, но я хотел бы, чтобы оба класса могли работать друг с другом, то есть использовать методы или поля друг друга. например, мне бы хотелось, чтобы при соединении ребра с вершиной оба указателя (edge-> myVertex, vertex-> myEdge) могли быть назначены в одном методе, который может принадлежать одному из классов.
Есть ли способ сделать это?
Благодарю.

0

Решение

Способ сделать это — использовать свободные функции, то есть алгоритмы для выполнения этих задач. В противном случае ваши классы теряют свою семантику. Например, вы можете иметь:

void connect_vertices(Vertex<T> v1, Vertex<T> v2, Edge<T> e) {
}

функция обработки этой логики.

1

Другие решения

Вы об этом думаете?

void Edge::setVertex(Vertex &v)
{
myVertex = &v;
v.myEdge = this;
}
0