Можно ли создавать классы, содержащие объекты этого же класса?

166
26 февраля 2018, 02:00

Можно ли создавать классы, содержащие в качестве данных объекты этого же класса, указатели/ссылки на такие объекты, их массивы?

Например:

class A
{
    A x;
    A* y;
    std::vector<A> v;
}; 
Answer 1

Объекты и массивы — нет, так как на момент объявления класс ещё не создан до конца, а потому неизвестно, сколько места требуется выделить для его экземпляров.

А указатели и ссылки — пожалуйста, ведь факт существования данного класса уже известен.

Answer 2

Указатели - запросто. А вот представьте себе, сколько памяти займет ваш класс, описанный в вопросе. Ведь он содержит в себе x, который содержит в себе x, который содержит в себе... Ну, вы понимаете - бесконечная рекурсия без каких бы то ни было надежд на прекращение. Это так, самое простое объяснение, почему нельзя.

Указатели же - запросто. Это очень широко применяемый метод - указатель на себя - для списков, деревьев и т.п.

Answer 3

Только если этот член статический, например:

class A
{
    static A a;
};
READ ALSO
Проблема с accept() сокеты С++

Проблема с accept() сокеты С++

При запуске сервера _Client получает верное значение128 или 126 или 132 например

142
Какую базу данных лучше выбрать

Какую базу данных лучше выбрать

Мне нужно создать некий накопитель информаци к которому будет доступ разных приложений

169
Показ старых и новых данных и вектора

Показ старых и новых данных и вектора

Пытаюсь сделать следующию логику1

168