小伙看你根骨奇佳,潜力无限,来学PHP伐。
大體看了一下,有幾個問題。
幾個複合賦值運算子定義有問題,例如:
Polynomial& operator+=(const Polynomial&x) { return *this+ x; // 此处返回了局部变量的引用,是未定义行为 }
原因是*this+x呼叫了Polynomial::operator+,回傳了一個新的Polynomial變量,這個變數是operator+=的局部變量,而operator+=的回傳值是這個新變數的引用,所以是未定義行為。其他幾個複合賦值運算子類似。
*this+x
Polynomial::operator+
Polynomial
operator+=
題主幾個運算子重載的實作不是很好,例如:
operator!=和operator==中只有一個需要具體實現,另一個應該調用被實現的那個;
operator!=
operator==
operator+=應該具體實現,而operator+應該調用operator+=,原因參考這裡,減法、乘法類似;
operator+
建構子初始化成員時應盡量使用成員初始化列表賦初值。
大體看了一下,有幾個問題。
幾個複合賦值運算子定義有問題,例如:
原因是
*this+x
呼叫了Polynomial::operator+
,回傳了一個新的Polynomial
變量,這個變數是operator+=
的局部變量,而operator+=
的回傳值是這個新變數的引用,所以是未定義行為。其他幾個複合賦值運算子類似。題主幾個運算子重載的實作不是很好,例如:
operator!=
和operator==
中只有一個需要具體實現,另一個應該調用被實現的那個;operator+=
應該具體實現,而operator+
應該調用operator+=
,原因參考這裡,減法、乘法類似;建構子初始化成員時應盡量使用成員初始化列表賦初值。