习题14-11
无错误;但是这种写法由于没有输入检查,所以对于上个练习不会发生什么;
习题14-12
略
习题14-13
复合赋值及减运算
Sales_data& Sales_data::operator+= (const Sales_data& lhs)
{
units_sold += lhs.units_sold;
revenue += lhss.revenue;
return *this;
}
Sales_data& Sales_data::operator-= (const Sales_data& lhs)
{
units_sold -= lhs.units_sold;
revenue -= lhss.revenue;
return *this;
}
Sales_data operator- (const Sales_data& lhs, const Sales_data& rhs)
{
Sales_data ret (lhs);
ret -= rhs;
return ret;
}
习题14-14
因为operator+=没有临时对象;
习题14-15
略
习题14-16
// StrBlob
bool operator== (const StrBlob& lhs, const StrBlob& rhs)
{
return *lhs.data == *rhs.data;
}
bool operator!= (const StrBlob& lhs, const StrBlob& rhs)
{
return *lhs.data != *rhs.data;
}
// StrBlobPtr
bool operator== (const StrBlobPtr& lhs, const StrBlobPtr& rhs)
{
return lhs.curr == rhs.curr;
}
bool operator!= (const StrBlobPtr& lhs, const StrBlobPtr& rhs)
{
return lhs.curr != rhs.curr;
}
// StrVec
bool operator== (const StrVec& lhs, const StrVec& rhs)
{
if (lhs.size() != rhs.size()) {
return false;
}
else {
auto l_iter = lhs.begin();
auto r_iter = rhs.begin();
for (l_iter, r_iter; l_iter != lhs.end(); ++ l_iter, ++ r_iter) {
if (*l_iter != *r_iter) {
return false;
}
}
}
return true;
}
bool operator!= (const StrVec& lhs, const StrVec& rhs)
{
return !(lhs == rhs);
}
// String
bool operator== (const String& lhs, const String& rhs)
{
if (lhs.size() != rhs.size()) {
return false;
}
else {
auto l_iter = lhs.begin, r_iter = rhs.begin;
for (l_iter, r_iter; l_iter!=lhs.end; ++l_iter, ++r_iter) {
if (*l_iter != *r_iter) {
return false;
}
}
}
return true;
}
bool operator!= (const String& lhs, const String& rhs)
{
return !(lhs == rhs);
}
习题14-17
略
习题14-18
略
习题14-19
// StrBlob类
bool operator< (const StrBlob& lhs, const StrBlob& rhs)
{
return std::lexicographical_compare(lhs.data->begin(), lhs.data->end(), rhs.data->begin(), rhs.data->end());
}
bool operator> (const StrBlob& lhs, const StrBlob& rhs)
{
return !(lhs < rhs);
}
// StrBlobPtr类
bool operator> (const StrBlobPtr& lhs, const StrBlobPtr& rhs)
{
return lhs.curr > rhs.curr;
}
bool operator< (const StrBlobPtr& lhs, const StrBlobPtr& rhs)
{
return lhs.curr < rhs.curr;
}
// StrVec类
bool operator< (const StrVec& lhs, const StrVec& rhs)
{
return std::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
}
bool operator> (const StrVec& lhs, const StrVec& rhs)
{
return rhs < lhs;
}
// String类
bool operator< (const String& lhs, const String& rhs)
{
return std::lexicographical_compare(lhs.begin, lhs.end, rhs.begin, rhs.end);
}
bool operator> (const String& lhs, const String& rhs)
{
return rhs < lhs;
}
习题14-20
Sales_data& operator+ (const Sales_data& lhs, const Sales_data& rhs)
{
Sales_data ret(lhs);
ret += rhs;
return ret;
}
Sales_data& Sales_data::operator+= (const Sales_data& rhs)
{
units_sold += rhs.units_sold;
revenue += rhs.revenue;
return *this;
}