C++(三十八)之加号重载

今天我们来讲一下运算符的重载。

运算符重载(Overloading operator)其实也是一种函数的调用方式。

运算符重载说白了就是我们赋予原来的运算符新的计算方式,

只不过这个方式要根据上下文来判定,这部分编译器会自动给我们做好。

运算符重载的格式:

type operator@(type)   //@代表要重载的运算符

{  //函数体

}

可以重载的运算符有一下这些:

今天我们从+号开始。

 

下面我们举例说明:

/****************************************************
 * brief  : +运算符重载 
 * author : shao 
 * date   :	2020-03-10
 * note   : none 
 *
 ****************************************************/
#include <iostream>
 
using namespace std;

class Person{
	
	/*设置全局函数为*/
	//friend Person operator+(Person &p1, Person &p2);

public:
	Person()
	{
		this->p_age = 10;
		this->p_ID = 10;
	}
	
	Person(int age, int ID)
	{
		this->p_age = age;
		this->p_ID = ID;
	}
	
	Person operator+(Person &p); 
	
//private:
	int p_age;
	int p_ID;
}; 
/*成员函数重载+*/
Person Person::operator+(Person &p)
{
	this->p_age += p.p_age;
	this->p_ID += p.p_ID;
	
	return *this;   //返回的是自身 
} 

//这里我们把全局重载+函数注释掉,否则编译的时候会出现二义性。
/* 全局函数重载+ */
//Person operator+ (Person &p1, Person &p2) 
//{
//	Person temp;
//	
//	temp.p_age = p1.p_age + p2.p_age;
//	temp.p_ID = p1.p_ID + p2.p_ID;
//	
//	return temp;	
//}

/*全局函数重载+*/
Person operator+ (Person &p1, int a) 
{
	Person temp;
	
	temp.p_age = p1.p_age + a;
	temp.p_ID = p1.p_ID + a;
	
	return temp;	
}

void test01(void)
{
	Person p1;
	Person p2(5,2); 
	
	Person p3 = p1 + p2;
	
	cout << "p3.p_age = " << p3.p_age << endl;
	cout << "p3.p_ID = "  << p3.p_ID << endl;
	
	Person p4;
	p4 = p2+p1; 
	
	cout << "p4.p_age = " << p4.p_age << endl;
	cout << "p4.p_ID = "  << p4.p_ID << endl;
	
	
	p4 = p4 + 10;
	cout << "p4.p_age = " << p4.p_age << endl;
	cout << "p4.p_ID = "  << p4.p_ID << endl;
}
 
int main(void)
{
 	test01();
 	
	return 0;
}

结果如下:

我们可以看到,

原本的计算方式只有基本类型的+。

现在我们重载后可以实现对类对象的+。这就是重载后让我们的计算变的更加方便。

实际重载函数也是函数,那么函数之间还可以重载。

就是code中的,

Person operator+ (Person &p1, int a) ;

Person operator+ (Person &p1, Person &p2) ;

这两个函数是相互重载的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值