这是一个const成员函数,这让我得到了树的最小节点:如何设计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'指向的值的潜力?与其总是提醒自己不要修改任何“下一个”要点,是否有办法通过更好地设计功能来防止它发生?
我让方法为const,因为我希望它可以在const和非const对象上工作,并且我希望const对象的结果不可修改,并且可以修改非const对象的结果。如果我声明函数的返回类型也是'const',那么它就不适用于非const对象的情况。或者我应该分开两个功能? – zhanwu 2011-03-16 11:07:37
是的,你可以提供2个版本;一个常量和另一个非常量,或者只是坚持一个非常量版本(这将是我的偏好)。 – trojanfoe 2011-03-16 11:23:47
这是一种常见的模式,只需提供'const'版本和'非const'版本就可以在调用中简单地执行const_cast'const_cast',并从'非const'版本返回。 – 2011-03-16 12:57:20