文章目录
- 一. 运算符重载
- 1.1 概念引入
- 1.2 运算符重载的定义与特性
- 二. 赋值运算符重载
- 2.1 概念
- 2.2 赋值运算符重载的特性
一. 运算符重载
在讲解赋值运算符重载之前,我们需要先了解何为运算符重载。
1.1 概念引入
对于内置类型,我们可以直接使用运算符,比如:int a = 0; a+=1;
但是C++规定,类类型对象(即d1,d2之类的)使用运算符时,需要通过运算符重载的形式给运算符指定新的含义。(简单理解来说,就是类它并不知道+,-,*,/是什么意思,需要我们来定义)
1.2 运算符重载的定义与特性
- 运算符重载:是具有特名字的函数
- C++规定:类类型对象 使用运算符时,必须转换成调用对应运算符重载,若没有对应的运算符重载,则会编译报错。
- 名字:运算符重载函数的名字是由operator和后面要定义的运算符共同构成。和其他函数的格式一样,它也具有:返回类型,参数列表,函数体。
- 参数:运算符是几元运算符,则函数就有几个参数(即重载运算符函数的参数个数=该运算符作用的运算对象数量)。
一元运算符有一个参数,而元运算符有两个参数。(一元:解引用*,++,- -,二元:+,-,*乘,/)
函数的第一个参数是:二元运算符的左侧运算对象;第二个参数:右侧。
还有一个问题是:若运算符重载函数里的变量是类里面的私有成员变量,那如何使用呢?
1.提供对应的getxxx函数
2.友元(即在成员函数的最左边加上:friend)
3.重载为成员函数
- this:如果这个运算符重载函数是在类里面,是成员函数,那么第一个参数是隐式的this指针,也就是左侧运算对象传给了隐式的this指针。因此运算符重载作为成员函数时,参数比运算对象少一个。
class Data
{
public:Data(int year, int month, int day){_year = year;_month = month;_day = day;}bool operator<(const Data& d) //this访问的是d1,d是d2的别名{if (_year < d._year)return true;else if (_year == d._year && _month < d._month)return true;else if (_year == d._year && _month == d._month && _day < d._day)return true;//其余情况均不符合,返回falsereturn false;}
private:int _year;int _month;int _day;
};
int main()
{Data d1(2024, 10, 19);Data d2(2024, 10, 2);bool ret1 = d1 < d2;std::cout << ret1 << std::endl;Data d3(2024, 10, 1);Data d4(