PHP中文网2017-04-17 13:35:13
大体看了一下,有几个问题。
几个复合赋值运算符定义有问题,比如:
Polynomial& operator+=(const Polynomial&x) {
return *this+ x; // 此处返回了局部变量的引用,是未定义行为
}
原因是*this+x
调用了Polynomial::operator+
,返回了一个新的Polynomial
变量,这个变量是operator+=
的局部变量,而operator+=
的返回值是这个新变量的引用,所以是未定义行为。其他几个复合赋值运算符类似。
题主几个操作符重载的实现不是很好,比如:
operator!=
和operator==
中只有一个需要具体实现,另一个应该调用被实现的那个;
operator+=
应该具体实现,而operator+
应该调用operator+=
,原因参考这里,减法、乘法类似;
构造函数初始化成员时应尽量使用成员初始化列表赋初值。