C++赋值运算符重载

运算符重载

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,它同样具有返回值、函数名及参数列表。

复制代码
class Date
{
public:
	Date(int year = 1, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	bool operator<(Date& d)//运算符重载
	{
		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;
		}
		else
		{
			return false;
		}
	}
	bool DateLess(Date& d)
	{
		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;
		}
		else
		{
			return false;
		}
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date d1(2025, 8, 1);
	Date d2(2024, 8, 1);
	cout << d1.DateLess(d2) << endl;//调用函数
	cout << (d1 < d2) << endl;//调用函数重载
	return 0;
}

通过上述代码可以看出,运算符重载相比函数调用更易懂,增强了代码的可读性。

函数原型:返回值类型 operator操作符(参数列表)

**注:**不能通过链接C++外的符合创造出新的操作符

重载操作符必须有一个类类型对象,形参比操作数少一个是因为成员函数存在隐藏的this指针

用于内置类型的运算符其含义不能发生改变

'.*' '::' 'sizeof' '?:' '.'这五个运算符不能重载

赋值运算符重载

复制代码
class Date
{
public:
	Date(int year = 1, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	bool operator!=(Date& d)
	{
		return _year != d._year || _month != d._month || _day != d._day;
	}
	Date& operator=(Date& d)//赋值运算符重载
	{
		if (*this != d)//避免自己给自己赋值
		{
			_year = d._year;
			_month = d._month;
			_day = d._day;
		}
		return *this;//返回*this,这样符合连续赋值的含义
	}
	void Print()
	{
		cout << _year << "年" << _month << "月" << _day << "日" << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date d(2021, 2, 5);
	Date d1;
	d1 = d;
	d.Print();
	d1.Print();
	return 0;
}

赋值运算符只能重载成类的成员函数不能重载成全局函数

赋值运算符与拷贝构造函数相似,如果涉及到资源申请必须显示定义。

前置++与后置++重载

复制代码
	Date& operator++()//前置++
	{
		_day += 1;
		return *this;
	}
	Date& operator++(int)//后置++
	{
		Date tmp(*this);
		_day += 1;
		return tmp;
	}

由于前置++和后置++都是一元运算符,因此为了让其能够形成正确的重载,C++规定后置++重载时要加一个int类型的参数,但在调用该函数时参数不需要进行传递,编译器会自动传递。

相关推荐
yivifu1 分钟前
精益求精,支持处理嵌套表格的Word表格转HTML表格
开发语言·c#·word
沐知全栈开发2 分钟前
PHP MySQL WHERE 子句详解
开发语言
糖纸风筝2 分钟前
Java指南:eclipse、java-activemq与测试验证
java·开发语言·学习
小坏讲微服务5 分钟前
整合Spring Cloud Alibaba与Gateway实现跨域的解决方案
java·开发语言·后端·spring cloud·云原生·gateway
玖剹25 分钟前
穷举 VS 暴搜 VS 深搜 VS 回溯 VS 剪枝
c语言·c++·算法·深度优先·剪枝·深度优先遍历
码上成长31 分钟前
<script setup> 实战模式:大型组件怎么拆?
开发语言·javascript·vue.js
yolo_guo43 分钟前
opencv 学习: QA_02 什么是图像中的高频成分和低频成分
linux·c++·opencv·计算机视觉
九河_1 小时前
解决pip install gym==0.19.0安装失败问题
开发语言·python·pip·gym
红豆诗人1 小时前
C语言进阶知识--文件操作
c语言·开发语言·文件操作
2301_803554522 小时前
socket编程
c++