這是一個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