3 回答

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