对于作业,我正在编写一个带有辅助函数的复制构造函数。
binarytree::binarytree(binarytree& right) {
copy(root, right.root);
}
我的复制功能:
void binarytree::copy(treenode*& copyRoot, const treenode* root) {
if (root != nullptr) {
//copy data
//copy left
copy(copyRoot->left, root->left);
//copy right
copy(copyRoot->right, root->right);
}
到目前为止,它的目的是制作BST的副本。但是,我的赋值指定函数将是static,void,并且有两个treenode *参数。是否可以使用treenode* copyRoot
作为参数而不是treenode*& copyRoot
来重写此功能?
如果我按原样更改功能参数,则不会保存该功能的副本,并且在测试时打印出空的BST。
答案 0 :(得分:0)
是否可以使用treenode * copyRoot作为参数而不是treenode *&重写此功能。 copyRoot?
我假设binarytree::copy()
的目标是创建treenode
的新副本(行copyRoot = new treenode();
建议它),所以对于这种情况......
不,你不能这样做。
通过treenode*& copyRoot
参数声明你是"返回"指针,而treenode* copyRoot
表示您正在向copy()
方法传递指针,而在copy()
方法中的结果实际上你有另一个这个指针的副本。
此案例的最佳说明是void cpy(int& i)
和void cpy(int i)
方法。后一种情况并没有改变传递给方法的int。现在将int
替换为int*
,这对您的问题应该是非常直接的解释。