一、介绍
顾名思义,运算符重载就是改变原来运算符的作用,让其有了新的用法
[返回值] 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;
}