Может ли класс С++ включать себя в качестве члена?

Я пытаюсь ускорить процедуру 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;
};