练习14.16:
//为strBlob定义==和!=
class strBlob
{friend bool operator==(const strBlob &lhs,const strBlob &rhs);friend bool operator!=(const strBlob &lhs,const strBlob &rhs);
};bool operator==(const strBlob &lhs,const strBlob &rhs)
{return lhs.data==rhs.data;
}bool operator!=(const strBlob &lhs,const strBlob &rhs)
{return !(lhs==rhs);
}//为strBlobPtr定义==和!=
class strBlobPtr
{friend bool operator==(const strBlobPtr &lhs,const strBlobPtr &rhs);friend bool operator!=(const strBlobPtr &lhs,const strBlobPtr &rhs);
};bool operator==(const strBlobPtr &lhs,const strBlobPtr &rhs)
{auto l = lhs.wptr.lock(),r = rhs.wptr.lock();if (l==r)//两个指针都为空,或指向相同的vector且curr指向相同元素时,相等,否则不等return (!r || lhs.curr==rhs.curr);else return false;
}bool operator!=(const strBlobPtr &lhs,const strBlobPtr &rhs)
{return !(lhs==rhs);
}//为strVec定义==和!=
class strVec
{friend bool operator==(const strVec &lhs,const strVec &rhs);friend bool operator!=(const strVec &lhs,const strVec &rhs);
};bool operator==(const strVec &lhs,const strVec &rhs);
{if (lhs.size()!=rhs.size()){return false;}for (auto itr1=lhs.begin(),itr2 = rhs.begin();itr1!=lhs.end() && itr2!=rhs.end();itr1++,itr2++){if (*itr1!=*itr2){return false;}}return true;
}bool operator!=(const strVec &lhs,const strVec &rhs)
{return !(lhs==rhs);
}
//为String定义==和!=
class String
{friend bool operator==(const String &lhs,const String &rhs);friend bool operator!=(const String &lhs,const String &rhs);private:const char *str;
}bool operator==(const String &lhs,const String &rhs)
{return strcmp(lhs.str,rhs.str);
}bool operator!=(const String &lhs,const String &rhs)
{return !(lhs==rhs);
}
练习14.17:
在练习7.40中,我们实现了Date类。因为我们可以比较两个日期是否相等,因此需要实现相等运算符。
class Date
{friend bool operator==(const Date &d1,const Date &d2);friend bool operator!=(const Date &d1,const Date &d2);
};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);
}