Может ли класс С++ включать себя в качестве члена?
Я пытаюсь ускорить процедуру python, написав ее на С++, а затем используя ее с помощью ctypes или cython.
Я новичок в С++. Я использую Microsoft Visual С++ Express, поскольку он бесплатный.
Я планирую реализовать дерево выражений и метод для его оценки в постфиксном порядке.
Проблема, с которой я сталкиваюсь сразу:
class Node {
char *cargo;
Node left;
Node right;
};
Я не могу объявить left
или right
как Node
.
Ответы
Ответ 1
Нет, потому что объект будет бесконечно большим (потому что каждый Node
имеет в качестве членов два других объекта Node
, каждый из которых имеет как два других объекта Node
, каждый из которых... ну, вы получаете точка).
Однако вы можете иметь указатель на тип класса в качестве переменной-члена:
class Node {
char *cargo;
Node* left; // I'm not a Node; I'm just a pointer to a Node
Node* right; // Same here
};
Ответ 2
Просто для полноты, обратите внимание, что класс может содержать статический экземпляр самого себя:
class A
{
static A a;
};
Это связано с тем, что статические члены фактически не хранятся в экземплярах класса, поэтому нет рекурсии.
Ответ 3
Нет, но он может иметь ссылку или указатель на себя:
class Node
{
Node *pnode;
Node &rnode;
};
Ответ 4
Вы должны использовать указатель и лучше инициализироваться:
class Node {
char * cargo = nullptr;
Node * left = nullptr;
Node * right = nullptr;
};