C++ Primer(第五版) 14.3--14.3.2节练习

14.13    还可定义一个减法运算符:

Sales_data& Sales_data::operator-=(const Sales_data &rhs)
{
	units_sold -= rhs.units_sold;
	revenue -= rhs.revenue;
	return *this;
}

Sales_data operator-(const Sales_data &lhs, const Sales_data &rhs)
{
	Sales_data sub = lhs;
	sub -= rhs;
	return sub;
}

14.14    用代码复用是较好的方式。

14.15    定义的Date类不需要进行算术运算。

14.16    StrBlob和StrBlobPtr:

bool operator==(const StrBlob &lhs, const StrBlob &rhs)
{
	return lhs.data == rhs.data;
}

bool operator!=(const StrBlob &lhs, const StrBlob &rhs)
{
	return !(lhs == rhs);
}

bool operator==(const StrBlobPtr &lhs, const StrBlobPtr &rhs)
{
	return eq(lhs, rhs);
}

bool operator!=(const StrBlobPtr &lhs, const StrBlobPtr &rhs)
{
	return neq(lhs, rhs);
}

StrVec:

bool operator==(const StrVec &lhs, const StrVec &rhs)
{
	if (lhs.size() != rhs.size())
		return false;
	for (auto iter1 = lhs.begin(), iter2 = rhs.begin(); iter1 != lhs.end(); ++iter1, ++iter2) {
		if (*iter1 != *iter2)
			return false;
	}
	return true;
}

bool operator!=(const StrVec &lhs, const StrVec &rhs)
{
	return !(lhs == rhs);
}

String:

bool operator==(const String &s1, const String &s2)
{
	if (strcmp(s1.p, s2.p) == 0)
		return true;
	else
		return false;
}

bool operator!=(const String &s1, const String &s2)
{
	return !(s1 == s2);
}

14.17 Date类的相等和不等运算符:

bool operator==(const Date &d1, const Date &d2)
{
	return d1.year == d2.year && d1.month == d2.month && d1.day == d2.day; 
}

bool operator!=(const Date &d1, const Date &d2)
{
	return !(d1 == d2);
}

14.18    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;
}

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)
{
	auto l = lhs.wptr.lock(), r = rhs.wptr.lock();
	if (l == r) {
		if (!r)
			return false;
		return (lhs.curr < rhs.curr);
	} else {
		return false;
	}
}

bool operator>(const StrBlobPtr &lhs, const StrBlobPtr &rhs)
{
	return !((lhs < rhs) || (lhs == rhs));
}

bool operator<=(const StrBlobPtr &lhs, const StrBlobPtr &rhs)
{
	return !(lhs > rhs);
}

bool operator>=(const StrBlobPtr &lhs, const StrBlobPtr &rhs)
{
	return !(lhs < rhs);
}

StrVec:

bool operator<(const StrVec &lhs, const StrVec &rhs)
{
	for (auto iter1 = lhs.begin(), iter2 = rhs.begin(); 
	     iter1 != lhs.end() && iter2 != rhs.end(); 
	     ++iter1, ++iter2) {
		if (*iter1 < *iter2)
			return true;
		if (*iter1 > *iter2)		
			return false;
	}
	if (lhs.size() < rhs.size())
		return true;
		
	return false;
}

bool operator>(const StrVec &lhs, const StrVec &rhs)
{
	return !((lhs < rhs) || (lhs == rhs));
}

bool operator<=(const StrVec &lhs, const StrVec &rhs)
{
	return !(lhs > rhs);
}

bool operator>=(const StrVec &lhs, const StrVec &rhs)
{
	return !(lhs < rhs);
}

String:

bool operator<(const String &s1, const String &s2)
{
	return strcmp(s1.p, s2.p) < 0;
}

bool operator>(const String &s1, const String &s2)
{
	return strcmp(s1.p, s2.p) > 0;
}

bool operator<=(const String &s1, const String &s2)
{
	return !(s1 > s2);
}
bool operator>=(const String &s1, const String &s2)
{
	return !(s1 < s2);
}

14.19    Date类比较:

bool operator<(const Date &d1, const Date &d2)
{
	return (d1.year < d2.year) ||
			(d1.year == d2.year && d1.month < d2.month) ||
			(d1.year == d2.year && d1.month == d2.month && d1.day < d2.day);
	
}

bool operator<=(const Date &d1, const Date &d2)
{
	return (d1 < d2) || (d1 == d2);
} 

bool operator>(const Date &d1, const Date &d2)
{
	return !(d1 <= d2);
}

bool operator>=(const Date &d1, const Date &d2)
{
	return !(d1 < d2);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值