Вопрос по c++ – Может ли класс быть самопровозглашенным?

4

** Если структура может быть самоссылочной. лайк

struct list
{
     struct list *next;
};

поскольку нет никакой разницы между классом и структурой, за исключением спецификаторов доступа по умолчанию. тогда можно написать класс ...

class list
{
     class list *next;
};

или может быть есть какой-то другой синтаксис для получения самоссылочного класса.? если да то как? **

Да, нужно добавить "struct list * next;" это только вещь C В C ++ вы всегда просто делаете «list * next;». newacct
В C ++ вы можете, по крайней мере, в 99,9% случаев избегать ввода «struct» apos; или "класс" перед именем переменной, как в: & quot; список классов {список * следующий; }; & Quot; David Rodríguez - dribeas
Как вы упомянули сами, тамabsolutely no difference между классом и структурой в C ++, кроме модификаторов доступа по умолчанию. Mehrdad Afshari

Ваш Ответ

1   ответ
13

но вы можете только самостоятельно ссылаться на указатель или ссылку на класс (или структуру)

Типичный способ это просто:

class list { list* next; }

Если вам нужны два класса для взаимной ссылки друг на друга, вам нужно просто объявить классы следующим образом:

class list;
class node;

class list { node* first; }
class node { list* parentList; node* next; }

Если у вас нет полной декларации (только предварительная декларация), вы можете декларировать только указатели или ссылки. Это потому, что компилятор всегда знает размер указателя или ссылки, но не знает размер класса или структуры, если у него нет полного объявления.

+1 - хорошо - но это последнее предложение должно заканчиваться «определением класса» (не декларация :)
+1 Фейсал / Лу. & quot; класс X; & quot; является "полной декларацией" (неполного типа). C не вызывает "struct list {int d; }; & Quot; определение, но вместо этого называет это объявление полного типа. C ++ означает это, называя это определением. Хороший ответ иначе, конечно.

Похожие вопросы