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.

}

  

时间: 2024-08-01 10:41:23

14.3. 算术操作符的重载的相关文章

[c++primer][14]重载操作符与转换

14.1 重载操作符的定义 不能重载的操作符:.  ?:  sizeof  ::  .* 不能为任何内置类型定义额外的新的操作符:优先级和结合性是固定的:不再具备短路求值特性(不建议重载&&.||.逗号): 一般将算术和关系操作符定义为非成员函数,而将赋值操作符定义为成员: 使用重载操作符的方式: 1)  与内置类型使用操作符方式一样: 2)  也可像调用普通函数一样调用重载操作符函数,指定函数并传递适当类型适当数目的形参: item1 += item2; // expression ba

C++primer第十四章 重载操作符与转换

这些标准库的类型具有相同的操作符,使用它们就像使用内置数组和指针一样.允许程序使用表达式而不是命名函数,可以使编写和阅读程序容易得多.将 cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << endl; 和以下更为冗长的代码相比较就能够看到.如果 IO 使用命名函数,类似下面的代码

附录A培训实习生-面向对象基础(3):方法重载

就上一篇代码而言,你如果写Cat cat = new Cat();会直接报错错误 : 1       “Cat”方法没有采用“0”个参数的重载 E:\大话设计模式学习\BigDesignPatterns\附录A培训实习生之面向对象基础\动物运动会\AnimalGames\Form1.cs       20     23     AnimalGames 原因就是必要给小猫起名字.如果当真需要不起名字也要生出小猫来,可以采用方法重载. 方法重载提供了创建同名的多个方法的能力,但这些方法需使用不同的参

c++高质量编程手册

怡化主管强烈要求我读这本书.... 笔记尚未完成,持续更新呗.. 第1章 高质量软件开发之道 1.1 软件质量基本概念 1.1.1 如何理解软件的质量:功能性和非公能性 1.1.2 提高软件质量的基本方法: 一次性编出高质量的程序 1.1.3 "零缺陷"理念 1.2 细说软件质量属性 1.2.1 正确性: 需求范围内的需求 1.2.2 健壮性  需求外的扩展需求 1容错  2恢复 1.2.3 可靠性  你平均无故障时间衡量 1.2.4 性能  时间-空间效率 优化数据结构,算法,代码来

C++Primer 第十四章

//1.当运算符作用于类类型运算对象时,可以通过运算符重载重新定义该运算符的含义.明智的使用运算符重载能令程序更加易于编写和阅读. //2.重载的运算符是具有特殊名字的函数,它们由关键字operator和其后要定义的运算符号共同组成.和其它函数一样,重载的运算符也包含返回类型,参数列表以及函数体. //3.除了重载函数调用符之外,其余的重载运算符不能含有默认实参. //4.如果运算符函数是成员函数,则其左侧运算对象绑定到隐式的this指针. // 对于运算符函数来说,它或者是类的成员,或者至少含

JDBC学习笔记(6)——获取自动生成的主键值&amp;处理Blob&amp;数据库事务处理

获取数据库自动生成的主键 [孤立的技术是没有价值的],我们这里只是为了了解具体的实现步骤:我们在插入数据的时候,经常会需要获取我们插入的这一行数据对应的主键值. 具体的代码实现: 1 /** 2 * 获取数据库自动生成的主键 3 */ 4 @Test 5 public void testGetKeyValues(){ 6 Connection connection=null; 7 PreparedStatement preparedStatement=null; 8 ResultSet rs=n

《高质量程序设计指南C/C++语言》笔记总结

在对林锐,韩永泉编著的<高质量程序设计指南C/C++语言>的学习中,我从中了解到了很多编程的小细节和重要的概念,特总结规整如下: 1.标准C语言允许任何非void类型的指针和void类型的指针之间进行直接的相互转换.但在C++中,可以把任何类型的指针直接指派给void类型指针,因为void*是一种通用指针:但是不能反过来将void类型指针直接指派给任何非void类型的指针,除非进行强制转换.因此在C语言环境中我们就可以先把一种具体类型的指针如int*转换为void*类型,然后再把void*类型

【原】Java学习笔记008 - 方法(函数)

1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 // 方法/函数 Method/Function 6 7 // 为什么会出现方法? 8 // 原因1.在程序中多处出现相同的语句内容 9 // 原因2.会发生变化 10 11 // [只有变化是不变的] 12 // 回顾一下变量,为了应对变化,提出的新的机制 13 // 需要对变化进行封装处理,在这里就

从string类的实现看C++类的四大函数

很久之前参加过一次面试,记得当时面试官问过我一个很基础的代码题:实现string类的四大基本函数! 一个C++类一般至少有四大函数,即构造函数.拷贝构造函数.析构函数和赋值函数,一般系统都会默认.但是往往系统默认的并不是我们所期望的,为此我们就有必要自己创造他们.在创造之前必须了解他们的作用和意义,做到有的放矢才能写出有效的函数. 1 #include <iostream> 2 3 class CString 4 { 5 friend std::ostream & operator&l