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

C++赋值运算符重载

赋值运算符重载

目录

  • 赋值运算符重载
        • 示例1:
        • 示例2:
        • 示例3:
        • 示例4:

很巧妙的是,在编写这篇文章时(2023年2月27日),再加100天就是6月7日,恰好是今年高考的百日誓师!
(文章最后会阐述为什么要加100天)

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。

函数名字为:关键字operator后面接需要重载的运算符符号

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

示例1:

例如我们在Date类中比较两个日期是否相等:

bool operator==(const Date& d1,const Date& d2)
{return d1._year==d2._year&&d1._month==d2._month&&d1._day==d2._day;
}

即:

这里的:

d1==d2;    //转换成operator==(d1,d2);(由编译器完成)

上述对于比较的结果,可更改为:(注意运算符的优先级)

image-20230227135706111


问题:若属性是私有的,怎么访问呢?

方式一:设置一个共有的get方法

方式二:放到类里面

//更改如下:
bool operator==(const Date& d)
{return _year==d._year&&_month==d._month&&_day==d._day;
}

示例2:

我们再来尝试Date类日期间大于小于的比较:

//放在类里面的
bool operator>(const 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;}return false;
}

示例3:

Date类日期间的大于等于:

bool operator>=(const Date& d)
{//this代表d1的地址,因此对this解引用即指向d1//复用上述已经书写的大于和等于的判定return *this>d||*this==d;
}

示例4:

日期加天数怎么办呢?(例如算某天过100天之后的日期)

函数名:operator+
参数:(int day)
返回类型:Date

得到每个月的天数;天满了进月,月满了进年

Step1:得到每个月的天数(判定是平年还是闰年)

int GetMonthDay(int year,int month)
{static int monthDayArray[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//平年if(month==2 && (year%4==0&&year%100!=0)||year%400==0)                //闰年{return 29;}else{return monthDayArray[month];}
}

Step2:加上天数

Date operator+=(int day)
{_day+=day;//日进while(_day>GetMonthDay(year,month)){_day-=GetMonthDay(year,month);_month++;//月进if(_month==13){_year++;_month=1;}}return *this;
}

因此结果如下:

image-20230227170645274

很巧妙的是,在编写这篇文章时(2023年2月27日),再加100天就是6月7日,恰好是今年高考的百日誓师!

http://www.lryc.cn/news/22886.html

相关文章:

  • 网络性能总不好?专家帮你来“看看”— CANN 6.0 黑科技 | 网络调优专家AOE,性能效率双提升
  • Qss自定义属性
  • 连接金蝶云星空,数据交互轻松搞定!丨三叠云
  • JSX是什么,React为什么使用JSX,babel怎么转译JSX的
  • 从工地转行软件测试,拿下13k+年终奖是种什么体验?
  • 前端面试题 —— 计算机网络(二)
  • 山东大学机器学习期末2022
  • FEBC2022|打造VR内容生态闭环 佳创视讯持续加码轻量化内容建设
  • Redis常见的数据类型命令
  • Python3+Selenium3自动化测试-(准备)
  • VUE的安装和创建
  • ETL工具(kettle) 与 ETL产品(BeeloadBeeDI) 差之毫厘,谬以千里
  • 轻松入门H3C无线AC上线AP【入门篇】
  • 尚医通(二十五)就医提醒和预约统计
  • 网页js版音频数字信号处理:H5录音+特定频率信号的特征分析和识别提取
  • uniapp结合腾讯云及时通信IM的聊天记录本地存储方案
  • PyQGIS开发 -- 基础学习笔记
  • 一篇了解模块打包工具之 ——webpack(1)
  • k8s学习之路 | Day16 k8s 中的容器初探
  • export、import、commit、save、load的区别
  • 多部委联合举办中国人工智能大赛启动会在厦召开,快商通亮相发言
  • js红宝书学习笔记(1-6章)
  • 第十四届蓝桥杯第三期官方模拟赛C\C++题解
  • API接口安全
  • 2023前端一面vue面试题合集
  • 【Leetcode 剑指Offer】第 5 天 查找算法(中等)
  • 薯条投放适合哪些笔记?小红书薯条投放的3种模式
  • 记录第一个Python练习的过程
  • 【Python】3.3实现多线程
  • 在linux中使用lftp和sftp下载文件(夹)