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+=
,原因參考這裡,減法、乘法類似;
建構子初始化成員時應盡量使用成員初始化列表賦初值。