运算符重载

一、介绍

顾名思义,运算符重载就是改变原来运算符的作用,让其有了新的用法

[返回值] operator [运算符](参数列表){…}

<返回类型说明符> operator <运算符符号>(<参数表>)
{
 
     <函数体>
 
}

注意:

1、重载的参数个数必须要与运算符原来的参数个数一样,比如+号的参数就是左加数与右加数两个。那么当我们重载加号时也要保证有两个左右加数作为参数
2、单目:右参数是形参,双目:左边形参作为运算符左操作数,右边形参是右操作数,因为类成员函数默认有一个this指针。他会指针指向类本身
单目:this指向运算符右参数
双目:this指向运算符左参数
举例:
我们要实现 a -b,因为this指向a,我们只需要写右参数就可以 写成:int operator-(Time b)

个人理解:就是a是调用这个运算符重载函数,this是谁调用就指向谁

运算符重载为全局函数时,参数的个数等于运算符的目数(即操作数的个数);运算符重载为成员函数时,参数的个数等于运算符的目数减一(因为有成员函数有隐藏的this指针)


bool operator==(const Date& x)//bool operator==(Date* this,const Date&x)
	{
		return _year == x_year
			&& _month == x_month
			&& _day == x_day;
//实际上是:
//	    return this->_year == x._year
//			&& this->_month == x._month
//			&& this->_day == x._day;*/
	}
 d1==d2;
//或者 d1.operator==(d2);

赋值运算符重载

根据运算符重载规则我们来进行赋值(=)运算符重载

class Date
{
public:
	Date(int year = 0, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
//赋值运算符重载
	void operator=(const Date& d)
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
	}
	void Print()//输出
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}

	private:
	//public:
	int _year;
	int _month;
	int _day;	
};
int main()
{
	Date d1(2021, 10, 11);
	Date d2(2020, 11, 11);
	Date d3(2021, 11, 11);
	d1 = d3;
	d1.Print();
	d3.Print();
	//赋值运算符重载:用于两个以及那个定义出来的对象间拷贝复制
	//拷贝构造:用一个已经存在的对象去构造初始化另一个即将创建的对象
	//拷贝构造:d3=d5;
	return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值