【C++】中类的6个默认成员函数 取地址及const成员函数 && 学习运算符重载 && 【实现一个日期类】

04-13 1379阅读

文章目录

    • 一、【C++】赋值运算符重载
      • 1.1 运算符重载【引入】
      • 1.2 运算符重载
      • 1.3 赋值运算符重载
      • 1.4 赋值
      • 二、日期类的实现
        • 2.1 判断小于
        • 2.2 判断等于
        • 2.3 判断小于等于
        • 2.4 判断大于
        • 2.5 判断大于等于
        • 2.6 判断不等于
        • 2.7 日期加等天数
        • 2.8 获取月份天数
        • 2.9 日期加天数
        • 2.9.1 日期减等天数
        • 2.9.2 日期减天数
        • 三、前置++ && 后置++
          • 3.1 日期减日期【返回天数】
          • 3.2 流插入
          • 3.3 流提取
          • 3.4 检查输入日期是否合法
          • 四、日期类的实现【源码】
          • 五、const修饰
            • 5.1 const成员函数
            • 5.2 小结一下:
            • 5.3 默认成员函数【取地址及const取地址操作符重载】

              一、【C++】赋值运算符重载

              1.1 运算符重载【引入】

              • C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。
              • 函数名字为:关键字operator后面接需要重载的运算符符号。
              • 函数原型:返回值类型 operator操作符(参数列表)

                注意:

                • 不能通过连接其他符号来创建新的操作符:比如operator@

                  【C++】中类的6个默认成员函数 取地址及const成员函数 && 学习运算符重载 && 【实现一个日期类】

                • 重载操作符必须有一个类类型参数【不能去重载运算符改变内置类型的行为】

                • 用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义

                • 作为类成员函数重载时,其形参看起来比操作数数目少1个,因为成员函数的第一个参数为隐藏的this

                • .* :: sizeof ?: . 注意以上5个运算符不能重载。这里的是.*,不是*,这写经常在笔试选择题中出现。


                  • 我们写了一个日期类,有没有可能要比较比较呢?
                    class Date
                    {
                    public:
                    	Date(int year = 1900, int month = 1, int day = 1)
                    	{
                    		_year = year;
                    		_month = month;
                    		_day = day;
                    	}
                    	//private: // 一会有解决方法
                    	int _year;
                    	int _month;
                    	int _day;
                    };
                    
                    • 我们写了一个比较相等的函数,如果是传值的话没有必要,我们形参直接写成&,而且也不需要修改,所以再加上const
                      bool DateEquel(const Date& x, Date& y)
                      {
                      	return x._year == y._year
                      		&& x._month == y._month
                      		&& x._day == y._day;
                      }
                      
                      • 下面再实现一个函数【比较小于】
                        bool DateLess(const Date& x, Date& y)
                        {
                        	if (x._year  
                        
                        • 上面有一些不好的地方,取名字的问题,取得很乱就不知道这个函数是干什么的

                          下面我就要用一个新的符号

                          1.2 运算符重载

                          • 这里的运算符重载 和函数重载的重载不是一个意思
                          • 对运算符的行为重新定义

                            operator+运算符做函数名

                            • 刚刚上面写的代码就可以写成下面这样
                              bool operator==(const Date& x, Date& y)
                              {
                              	return x._year == y._year
                              		&& x._month == y._month
                              		&& x._day == y._day;
                              } 
                              bool operator
                              	if (x._year 

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]