如題,下面給出operator+=和operator+的實現
1 Sales_data& 2 Sales_data::operator+=(const Sales_data &rhs) 3 { 4 units_sold += rhs.units_sold; 5 revenue += rhs.revenue; 6 return *this; 7 } 8 9 Sales_data 10 operator+(const Sales_data &lhs, const Sales_data &rhs) 11 { 12 Sales_data sum = lhs;
13 sum += rhs; 14 return sum; 15 }
上面的代碼是用調用operator+來定義operator+=的。
首先operator+有兩個參數,其參數類型為const,是不需要改變的,其返回類型為Sales_data類型的一個拷貝。不過每次都需要在函數體內定義一個臨時變量,用來返回拷貝。
而operator+=有一個參數,其參數類型為const,不需要改變,其返回類型為Sales_data類型的引用。每次不需要在函數內創建臨時變量,直接可返回*this。
如果用operator+來定義operator+=的話,則不論調用operator+還是operator+=,每次都會創建一個Sales_data的臨時變量。
以下為調用operator+來定義operator+=的代碼:
1 Sales_data& Sales_data::operator+=(const Sales_data &rhs) 2 { 3 Sales_data old_data = *this; 4 *this = old_data + rhs; 5 return *this; 6 } 7 8 Sales_data operator+(const Sales_data &lhs, const Sales_data &rhs) 9 { 10 Sales_data sum; 11 sum.units_sold = lhs.units_sold + rhs.units_sold; 12 sum.revenue = lhs.revenue + rhs.revenue; 13 return sum; 14 }
所以說調用operstor+=來定義operator+是更有效率的。
你也會覺得這個問題對你有幫助: