我是靠谱客的博主 着急鲜花,最近开发中收集的这篇文章主要介绍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;
}

 

转载于:https://www.cnblogs.com/xyqxyq/p/10211354.html

最后

以上就是着急鲜花为你收集整理的c++类的单目和双目运算符的重定义的全部内容,希望文章能够帮你解决c++类的单目和双目运算符的重定义所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部