C++之运算符重载

 运算符重载定义:C++ 允许在同一作用域中的某个函数运算符指定多个定义,分别称为函数重载运算符重载

重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。

当您调用一个重载函数重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。【引自菜鸟教程】

其实就相当于重新定义一个函数一样,重新定义一个运算符。

实操:

 

 定义重载函数跟定义普通函数一样 返回值 函数名 参数 这三样不能少

分析这个要达到的需求是 判断 CDate d1 > CDate d2 的返回值

因此重载函数的返回值是bool 

函数名是固定的 :operator 运算符 

参数根据实际情况定义 此处是两个CDate类型的对象进行比较 所以 参数是CDate类型

bool operator >(const CDate date) const

 

(加const是为了防止在运行过程中date值改变,最好在参数前加const)

定义二元运算符的例子 

https://www.runoob.com/cplusplus/binary-operators-overloading.html

完整代码如下:

 1 class CDate
 2 {
 3 private:
 4     int _year;
 5     int _month;
 6     int _day;
 7     int getTotal()const
 8     {
 9         return _year*365+_month*30+_day;
10     }
11 public:
12     void setYear(int year){_year = year;}
13     void setMonth(int month){_month = month;}
14     void setDay(int day){_day = day;}
15     CDate(int year,int month,int day):_year(year),_month(month),_day(day){}
16 
17     //重载运算符
18     bool operator >(const CDate date) const
19     {
20         return getTotal() > date.getTotal();
21     }
22     bool operator <(const CDate date) const
23     {
24         return getTotal() < date.getTotal();
25     }
26     bool operator ==(const CDate date) const
27     {
28         return getTotal() == date.getTotal();
29     }
30 };

note:

1.写的时候很奇怪为什么不用写两个参数,只用写一个就够了,其实定义在类中的二元运算符可以直接用参数名来来表示左边的变量相应的参数。

    4-8补 :千万不要写两个参数,二元运算符的前一个参数可以直接调用类中的函数,就像这样

                                         

 

 

2.判断日期的大小就直接用各自的年×一个相同的数,月也×相同的数再加上天数就可以了,不过这个类没有判断日期的准确性。

 

posted on 2020-03-30 17:17  秃头女孩今夜也不睡觉  阅读(190)  评论(0编辑  收藏  举报

导航