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 关注
- 1908 浏览
添加回答
举报