这是一个const成员函数,它允许我获取树的最小节点:
BinarySearthTree* BinarySearchTree::min() const
{
// Return the minimum node (left-most node) value of the tree
BinarySearchTree * next = (BinarySearchTree *) this;
for (next ; next != NULL; next = next->pLeft)
if (next->pLeft == NULL)
return next;
}
我必须在将“this”指针分配给“next”时抛弃它的常量,但这实际上增加了我可以修改'this'指向的值的潜力?而不是总是提醒自己不要修改任何“下一个”点,是否有办法通过更好地设计函数来防止它发生?
答案 0 :(得分:3)
制作next
const
:
const BinarySearthTree* BinarySearchTree::min() const
{
// Return the minimum node (left-most node) value of the tree
const BinarySearchTree *next;
for (next = this; next != NULL; next = next->pLeft)
if (next->pLeft == NULL)
return next;
return NULL;
}
答案 1 :(得分:1)
如果您不希望修改内容,则应使min()
返回指向const
对象的指针。
因此,您的next
变量也应该是指向const
对象的指针。
以下是我认为您的方法应该如何显示:
const BinarySearchTree* BinarySearchTree::min() const
{
// Return the minimum node (left-most node) value of the tree
for (const BinarySearchTree* next = this; next != NULL; next = next->pLeft)
{
if (next->pLeft == NULL)
{
return next;
}
}
return this;
}
另外,在C ++中,你应该避免使用C风格的强制转换。为此目的存在const_cast
:
BinarySearchTree* next = const_cast<BinarySearchTree*>(this);
但在这种情况下,这不是必需的。