通过引用传递对象(c++)



我想要一个从数组创建二叉树并且不返回任何东西的方法。所以我必须通过参考工作,但我有一些问题与正确的语法使用。

在发布这个问题之前,我显然已经尝试过搜索,我看到过类似的帖子,但没有答案是真正有帮助的。

到目前为止我所做的如下:

My Class:

class Node
{
private:
int data;
Node* left;
Node* right;
public:
[...]
void make_tree(Node* node, int values[], int size);
};

方法:

// Every operations are done a copy of node, I want them to be done on the original object
void Node::make_tree(Node* node, int values[], int size)
{
if (size <= 0)
{
return;
}
else
{
if (!node)
{
node = new Node(values[size]);
}
else if (!node->has_data())
{
node->set_data(values[size]);
}
// recursive call
make_tree(node->left, values, size - 1);
make_tree(node->right, values, size - 1);
}
}

调用:

int main()
{
int tab[] = { 5,3,4,9,7,6 };
Node* root = new Node();
/* I want "root" to be passed by reference so every modifications
are done on the original object and not a copy who will be destroyed
at the end of the method scope. */
root->make_tree(root, tab, 6);
root->print_tree();   // there is nothing more in root
}

由于我已经传递了一个指向对象"root"的指针,我很困惑如何才能做到这一点。

谢谢。

PS:我知道我的递归调用没有做我描述的它应该做的事情。那是另一个问题了。

PPS:第一个帖子,所以如果你看到我做错了什么,请告诉我。
void Node::make_tree(Node* node, int values[], int size);

Node指针不能在函数内部修改,因为你通过值传递它(只有副本被修改)。

您可以使用引用,如注释中所建议的:

void Node::make_tree(Node* &node, int values[], int size);

或者你也可以使用指向指针void Node::make_tree(Node** node, int values[], int size);的指针,但是这会有更多的工作来修改你的代码。

最新更新