3 回答

TA貢獻883條經驗 獲得超454個贊
p 和 q 都是指向 ArcNode 類型的指針,那么你說的?q=p 是希望讓 p 所指的 node “賦值”給 q 所指的 node 嗎?
如果是這樣的話,那只寫 q = p 是不行的。
q = p 只是指針間的賦值,只是讓 q 指針指向 p 指針所指的對象。而?G.vertices 數組中的原指針還是指向原來的 node。
雖然你在?ArcNode 中重載了 operator=,但這是?ArcNode 的成員函數,調用它需要左操作數類型是?ArcNode 類型,而不是?ArcNode 指針類型。
你可以試試 *q = p 這樣來調用。
你的?ArcNode&?operator=(const?ArcNode?*a) 將參數聲明為 const 的,但是為了能夠調用 set 函數,所以還需要將強制轉型來去掉 const 修飾。
我想說的是在 C++ 中,最好不要用 (xxx) 的方式來轉型,尤其是去掉 const 指針的轉型應該用?const_cast<>。而且去掉 const 的轉型始終是有危險的,雖然在你這個代碼中應該沒什么問題(因為 p 是否為 const 指針本就無所謂,由于你參數聲明為 const 指針才成為 const 的)。
但其實你完全可以避免去 const 轉型,只要你把?set 函數的第二個參數也聲明為 const 就可以了。畢竟 set 函數也不去修改第二個參數所指的對象。
進一步說:你的 ArcNode&?operator=(const?ArcNode?*a) 函數本來就很奇怪。
= 運算符一般使用在相同類型的對象上的,也就是等號左右兩側的類型應該相同。這雖然不是強制要求,但慣例如此,而且更直觀。
將 = 運算符重載為?ArcNode&?operator=(const ArcNode&?a) 要更合理。 那么調用時只要 *q = *p 就可以了。
- 3 回答
- 0 關注
- 1968 瀏覽
添加回答
舉報