当前位置: 首页 > news >正文

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类型的参数,但在调用该函数时参数不需要进行传递,编译器会自动传递。

http://www.dtcms.com/a/309252.html

相关文章:

  • PHP Zip 文件操作详解
  • 汽车供应链PPAP自动化审核指南:如何用AI实现规则精准匹配与文件智能校验
  • MyBatis核心
  • MySQL——视图
  • C++对象访问有访问权限是不是在ide里有效
  • StarRocks vs. Trino
  • JavaWeb(苍穹外卖)--学习笔记16(定时任务工具Spring Task,Cron表达式)
  • RAGFLOW~Enable RAPTOR
  • 【云计算】云主机的亲和性策略(二):集群节点组
  • [ java 网络 ] TPC与UDP协议
  • 微波(Microwave)与毫米波(Millimeter wave)简介
  • 动态域名解析(DDNS)到底有什么用?
  • OSPF综合大实验
  • 下次接好运~
  • Oracle EBS 缺少adcfgclone.pl文件
  • 一分钟了解IO-Link 系列集线器
  • LaTeX 复杂图形绘制教程:从基础到进阶
  • Deep Height Decoupling for Precise Vision-based 3D Occupancy Prediction
  • 数据结构前篇 - 深入解析数据结构之复杂度
  • Leetcode——53. 最大子数组和
  • 如何将消息转移到新 iPhone
  • 如何将联系人从三星手机转移到 iPhone
  • MySQL 高并发下如何保证事务提交的绝对顺序?
  • 转换图(State Transition Diagram)和时序图(Sequence Diagram)画图流程图工具
  • 新手向:国内外大模型体验与评测
  • 智能图书馆管理系统开发实战系列(四):后端C++ DLL开发与模块化设计
  • 一种新的分布式ID生成方案--ULID
  • ABP VNext + Dapr Workflows:轻量级分布式工作流
  • (AC)唐克的新游戏
  • Vue3中Markdown解析与渲染的完整解决方案:从安全到性能优化