Этот вопрос касается ООП на любом статически типизированном языке. Предположим, у меня есть два класса, экземпляры которых поддерживают указатели / ссылки друг на друга. В моем случае один класс является контейнером, а другой - оберткой вокруг содержащегося объекта, который поддерживает указатель на контейнер, в котором он живет.
class Container {
Element[] elements;
}
class Element {
// ... data...
Container holds_me;
}
Конструктор Container
создает объект Element
, чтобы обернуть каждый содержащийся объект, и устанавливает свои указатели holds_me
на себя.
Теперь я хочу наследовать от этих классов. Мне нужен класс DerivedContainer
, который наследуется от Container
и содержит DerivedElement
объекты, где DerivedElement
наследуется от Element
и ссылается на содержащий DerivedContainer
объект. Как правильно это сделать (или это неправильно)?
Самым простым для конструктора DerivedContainer
является создание DerivedElement
s, сохранение их в elements
и установка указателя holds_me
на себя. Тогда все методы Container
и Element
будут работать, но любые новые методы, определенные в DerivedContainer
и DerivedElement
, должны будут понижать объекты, содержащиеся в elements
и holds_me
, чтобы вызывать любые новые методы. на них, которые не были определены в базовых классах. Это не выглядит красиво; так что мне интересно, есть ли лучшее решение?