c++教程 - c++类可以将自己包含为成员吗?




c++符号 tutorial (4)

不,因为对象会无限大(因为每个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
};

我试图通过用C ++编写,然后使用ctypes或cython来使用它来加速python例程。

我是c ++的新手。 我正在使用Microsoft Visual C ++ Express,因为它是免费的。

我计划实现一个表达式树,以及一个以后缀顺序评估它的方法。

我遇到的问题是:

class Node {
    char *cargo;
    Node left;
    Node right;
};

我不能将leftright声明为Node类型。


不,但它可以有一个引用或指向自己的指针:

class Node
{
    Node *pnode;
    Node &rnode;
};

为了完整起见,请注意一个类可以包含自身的静态实例:

class A
{
    static A a;
};

这是因为静态成员实际上并不存储在类实例中,因此没有递归。


在这里很正确的答案,但我想补充(完整性):

如果您在实现cpp文件的底部对模板将使用的所有类型进行显式实例化,则链接器将能够像往常一样查找它们。

编辑:添加显式模板实例的示例。 在定义了模板之后使用,并且所有成员函数都已定义。

template class vector<int>;

这将实例化(从而使链接器可用)该类及其所有成员函数(仅)。 类似的语法适用于模板函数,所以如果你有非成员运算符重载,你可能需要为这些重载做同样的事情。

上面的例子是相当无用的,因为除了当一个普通的包含文件(预编译头文件?)使用extern template class vector<int>以防止其在所有其他 (1000?)文件中实例化它时,矢量在头文件中完全定义那使用矢量。







c++