zoukankan      html  css  js  c++  java
  • c++类的单目和双目运算符的重定义

    这个里面需要注意的是对于双目运算符,像是加号,如果是复数加整数是一种情况,而整数加复数又是另一种情况,所以需要重定义两次。

    而对于单目运算符,如果是前缀的,直接重定义就可以了,但是如果是后缀的,我们在声明的时候,加上一个 int 就行了。

    #include <iostream>
    using namespace std;
     
    class Date
    {
    	public :
    		Date() {
    			year=0;
    			month=0;
    			day=0;
    		}
    		Date(int y,int m,int d)
    		{
    			year = y;
    			month = m;
    			day = d;
    		}
    		void display()
    		{
    			cout<<year<<"/"<<month<<"/"<<day<<endl;
    		}
    		friend Date operator+(int i, Date c);
    		friend Date operator+(Date c, int i);
    		Date operator++();
    		Date operator++(int);
    	  private:
    		int year,month,day;
    };
     
    Date Date::operator++()
    {
    	if (day+1>30) {
    		day %= 30;
    		if (month+1>12) {
    			month %= 12;
    			year++;
    		}
    	}
    	else
    		day++;
    	return *this;
    }
     
    Date Date::operator++(int)
    {
    	Date temp(*this);
    	if (day+1>30) {
    		day %= 30;
    		if (month+1>12) {
    			month %= 12;
    			year++;
    		}
    	}
    	else
    		day++;
    	return temp;
    }
     
    Date operator+(int i,Date c)
    {
    	int year_add = i / 360;
    	int month_add = i / 30;
    	int day_add = i % 30;
    	c.year += year_add;
    	c.month = c.month + month_add % 12;
    	if (c.month>12)
    		c.month -= 12;
    	c.day = c.day+day_add % 30;
    	if (c.day>30)
    		c.day -= 30;
    	return c;
    }
     
    Date operator+(Date c,int i)
    {
    	int year_add = i / 360;
    	int month_add = i / 30;
    	int day_add = i % 30;
    	c.year += year_add;
    	c.month = c.month + month_add % 12;
    	if (c.month>12)
    		c.month -= 12;
    	c.day = c.day+day_add % 30;
    	if (c.day>30)
    		c.day -= 30;
    	return c;
    }
     
    int main()
    {
    	Date a(2018,3,10),b;
    	int num=1000;
    	b=a+num;
    	b.display();
    	++b;
    	b.display();
    	a = b++;
    	a.display();
    	b.display();
    	system("pause");
    	return 0;
    }
  • 相关阅读:
    JS 正则查找与替换
    MySQL 批量插入值
    Python/Django 批量下载Excel
    Python/Django 下载Excel2007
    Python/Django 下载Excel2003
    Python3安装Scrapy
    服务器响应状态码
    细说同域-同父域-跨域
    细说Ajax跨域
    PostgreSQL学习
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/10211354.html
Copyright © 2011-2022 走看看