14.3. 算术操作符的重载

#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.



}

  

你可能感兴趣的:(操作符)