win7系统做asp网站,定制化网站开发公司,推广自己的产品,毕业设计购物网站开发的意义赋值运算符重载 目录赋值运算符重载示例1#xff1a;示例2#xff1a;示例3#xff1a;示例4#xff1a;很巧妙的是#xff0c;在编写这篇文章时#xff08;2023年2月27日#xff09;#xff0c;再加100天就是6月7日#xff0c;恰好是今年高考的百日誓师#xff01; …赋值运算符重载 目录赋值运算符重载示例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._yeard2._yeard1._monthd2._monthd1._dayd2._day;
}即 这里的
d1d2; //转换成operator(d1,d2);(由编译器完成)上述对于比较的结果可更改为注意运算符的优先级 问题若属性是私有的怎么访问呢 方式一设置一个共有的get方法
方式二放到类里面
//更改如下
bool operator(const Date d)
{return _yeard._year_monthd._month_dayd._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 *thisd||*thisd;
}示例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(month2 (year%40year%100!0)||year%4000) //闰年{return 29;}else{return monthDayArray[month];}
}Step2加上天数
Date operator(int day)
{_dayday;//日进while(_dayGetMonthDay(year,month)){_day-GetMonthDay(year,month);_month;//月进if(_month13){_year;_month1;}}return *this;
}因此结果如下 很巧妙的是在编写这篇文章时2023年2月27日再加100天就是6月7日恰好是今年高考的百日誓师