练习14.20
为你的Sales_data类定义加法和复合运算符。
解答:
符合运算符可以参考书中实现。之后,通过调用复合运算符来实现加法运算符。
练习14.21
编写Sales_data类的+和+=运算符,使得+执行实际的加法操作而+=调用+。相比14.3节(第497页)和14.4节(第500页)对这两个运算符的定义,本体的定义有何缺点?试讨论。
解答:
<pre name="code" class="cpp">Sales_data Sales_data::operator+(const Sales_data &rhs)
{
Sales_data sum;
sum.units_sold = units_sold + rhs.units_sold;
sum.revenue = revenue + rhs.revenue;
return sum;
}
Sales_data& Sales_data::operator+=(const Sales_data &rhs)
{
*this = *this + rhs;
return *this;
}
这个实现比较其前面的实现,多了很多不必要的拷贝步骤和创建Sales_data的步骤,在性能上没有前面版本来得高效。
练习14.22
定义赋值运算符的一个新版本,使得我们能把一个表示ISBN的string赋给Sales_data对象。
解答:
Sales_data& Sales_data::operator=(string& str)
{
bookNo = str;
return *this;
}
不过感觉没这么简单,但是用initializer_list又不大可能(参数类型不一),就写了这个简单的实现,感觉有点怪。
练习14.23
为你的StrVec类定义一个initializer_list赋值运算符。
解答:
参考书中500页的实现。
练习14.24
略
练习14.25
略