6.10 运算符的重载 operator函数的功能

6.10.1 operator函数的功能
我们要了解operator函数的功能,就举一个例子,让两个对象中的对应的数据相加生成一个新的对象。
我们一般会写出如下面的程序:

#include<iostream>
using namespace std;
class cAdd
{
private:
	int va;
	int vb;
public:
	cAdd(){va=0;vb=0;}
	cAdd(int a,int b){va=a;vb=b;}
	void disp();
	void set_va(int a){va=a;}
	void set_vb(int b){vb=b;}
	int get_va(){return va;}
	int get_vb(){return vb;}
};
void cAdd::disp()
{
	cout<<"va="<<va<<endl;
	cout<<"vb="<<vb<<endl;
}
cAdd add(cAdd &data1,cAdd &data2)
{
	cAdd sum;
	sum.set_va(data1.get_va()+data2.get_va());
	sum.set_vb(data1.get_vb()+data2.get_vb());
	return sum;
}
int main()
{
	cAdd a(100,200),b(10,20),c;
	c=add(a,b);
	c.disp();
}

在这里插入图片描述
这里强调一下add函数:

cAdd add(cAdd &data1,cAdd &data2)
{
	cAdd sum;
	sum.va=data1.va+data2.va;
	sum.vb=data1.vb+data2.vb;
	return sum;
}

这样写的话是错误的,因为cAdd add()是全局函数,并不能够直接调用类中的private数据,所以只能够通过调用set_va()和get_va()函数来实现。

那么,如果我想更加直观的表示两个对象的相加,也就是

c=a+b;

的话,我们就要引入operator函数了。
程序如下:

#include<iostream>
using namespace std;
class cadd
{
private:
	int va;
	int vb;
public:
	cadd()
	{
		va=0;vb=0;
	}
	cadd(int a,int b)
	{ 
		va=a;vb=b;
	}
	void disp();
	cadd operator+(cadd &dt);
	cadd operator-(cadd &dt);
};
void cadd::disp()
{
	cout<<"va="<<va<<endl;
	cout<<"vb="<<vb<<endl;
}
cadd cadd::operator+(cadd &dt)
{
	return cadd(va+dt.va,vb+dt.vb);
}
cadd cadd::operator-(cadd &dt)
{
	return cadd(va-dt.va,vb-dt.vb);
}
int main()
{
	cadd a(100,200),b(10,20),c;
	c=a+b;
	c.disp();
	c=a-b;
	c.disp();
}

在这里插入图片描述
这里可能会有一个小疑问

cadd cadd::operator+(cadd &dt)
{
	return cadd(va+dt.va,vb+dt.vb);
}

为什么这里operator()里面只定义了一个参数?而实际确实两个对象对应的数据相加?因为另外一个参数是当前的对象。
也就是说,当两个数计算时,只需要设置一个参数;当一个数运算时,就不需要设置参数。
此处也可以用this指针

cadd cadd::operator+(cadd &dt)
{
	return cadd(this->va+dt.va,this->vb+dt.vb);
}

另外还需要注意一点

c=a.operator+(b);

完全等价于

c=a+b;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值