练习14.1:
不同点:
重载操作符必须具有至少一个class或枚举类型的操作数。
重载操作符不保证操作数的求值顺序,例如对&&和||的重载版本不再具有“短路求值”的特性,两个操作数都要进行求值,而且不规定操作数的求值顺序。
相同点:
对于优先级和结合性及操作数的数目都不变。
练习14.2:
class Sales_data
{friend std::istream&operator>>(std::istream&,Sales_data &);friend std::ostream&operator<<(std::ostream&,const Salse_data &);public:Sales_data&operator+=(const Sales_data&);
};Sales_data operator+(con
练习14.3:
(a)"cobble" == "store"应用了C++语言内置版本的==,比较两个指针。
(b)svec1[0] == svec2[0]应用了string版本的重载==。
©svec1 == svec2应用了vector版本的重载==。
(d)svec1[0] == "stone"应用了string版本的重载==,字符串字面常量被转换为string。
练习14.4:
(a)%通常定义为非成员。
(b)%=通常定义为类成员,因为它会改变对象的状态。
©++通常定义为类成员,因为它会改变对象的状态。
(d)->必须定义为类成员,否则编译会报错。
(e)<<通常定义为非成员。
(f)&&通常定义为非成员。
(g)==通常定义为非成员。
(h)()必须定义为类成员,否则编译会报错。
练习14.5:
#include <iostream>
using namespace std;class Date {public:Date() {};Date(int y, int m, int d) {year = y;month = m;day = d;}friend ostream &operator<<(ostream &os, const Date &dt);private:int year, month, day;
};ostream &operator<<(ostream &os, const Date &d) {const char sep = '\t';os << "year:" << d.year << sep << "month:" << d.month << sep << "day:" << d.day << endl;return os;
}