#include<iostream> #include<string> using namespace std; class sales_item { friend istream& operator>>(istream &,sales_item&); friend ostream& operator<<(ostream&,const sales_item&); friend inline bool operator==(const sales_item&,const sales_item&); public: sales_item& operator+=(const sales_item&); private: int a; string str; }; sales_item operator+(const sales_item&,const sales_item&); inline bool operator!=(const sales_item&,const sales_item&); /* 一般而言,将算术和关系操作符定义为非成员函数 加法操作符并不改变操作符的状态,操作符是对 const 对象的引用;相反, 它产生并返回一个新的 Sales_item 对象,该对象初始化为 lhs 的副本 */ //加法运算符的重载 sales_item operator+(const sales_item& lhs,const sales_item& rhs) { sales_item temp(lhs); temp+=rhs; return temp; } /* 通常,C++ 中的类使用相等操作符表示对象是等价的。即,它们通常比较每 个数据成员,如果所有对应成员都相同,则认为两个对象相等。 • 如果类定义了 == 操作符,该操作符的含义是两个对象包含同样的数据。 • 如果类具有一个操作,能确定该类型的两个对象是否相等,通常将该函数 定义为 operator== 而不是创造命名函数。用户将习惯于用 == 来比较对 象,而且这样做比记住新名字更容易。 • 如果类定义了 operator==,它也应该定义 operator!=。用户会期待如果 可以用某个操作符,则另一个也存在。 • 相等和不操作符一般应该相互联系起来定义,让一个操作符完成比较对象 的实际工作,而另一个操作符只是调用前者。 */ //==的重载函数体 inline bool operator==(const sales_item& rhs,const sales_item& lhs) { return (rhs.a==lhs.a)&&(rhs.str==lhs.str); } //!=的重载函数体 inline bool operator!=(const sales_item& rhs,const sales_item& lhs) { return !(rhs==lhs); } int main() { ostream& os; os. }
时间: 2024-10-05 10:59:36