定义一个日期类Date,包括年、月、日等私有数据成员。要求为所定义的Date类设计如下重载运算符函数:

本文详细介绍了一个日期类Date的设计,该类实现了日期的加减运算符重载,能够计算两个日期之间的差值,并提供了获取年、月、日的方法。通过实例演示了如何使用这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题:
定义一个日期类Date,包括年、月、日等私有数据成员。要求为所定义的Date类设计如下重载运算符函数:
Date operator+(int days);//返回一个日期加天数days后得到的日期
Date operator-(int days);//返回一个日期减去天数days后得到的日期
Int operator-(Date& b);//返回两个日期相差的天数

#include<iostream>
using namespace std;

class Date
{
private:
	int year;
	int month;
	int day;
public:
	Date(int, int, int);
	Date operator+(int days);
	Date operator-(int days);
	int operator-(Date& b);//运算符重载
	int getYear();
	int getMonth();
	int getDay();//访问器
};

Date::Date(int y = 0, int m = 0, int d = 0) :year(y), month(m), day(d) {
}//初始化列表

Date Date::operator+(int days)
{
	if (day + days > 30)
	{
		month++;
		if (month > 12)
		{
			month = 1;
			year++;
		}
		day = day + days - 30;
	}
	else
	{
		day += days;
	}

	return *this;
}//运算符重载“+”,几天后的天数

Date Date::operator-(int days)
{
	if (day - days < 0)
	{
		month--;
		if (month == 0)
		{
			month = 12;
			year--;
		}
		day = day - days + 30;
	}
	else
	{
		day -= days;
	}

	return *this;
}//运算符重载“-”,几天前的天数

int Date::operator-(Date& b)
{
	int tmpdays1 = year * 360 + month * 30 + day;
	int tmpdays2 = b.year * 360 + b.month * 30 + b.day;
	if (tmpdays1 > tmpdays2)
		return tmpdays1 - tmpdays2;
	else
		return tmpdays2 - tmpdays1;
}//运算符重载“-”,两天差距天数

int Date::getYear()
{
	return year;
}

int Date::getMonth()
{
	return month;
}

int Date::getDay()
{
	return day;
}

int main()
{
	Date date1(2020, 5, 21);
	Date date2(2020, 6, 21);
	Date date3;
	int tmpdays3;

	date3 = date1 + 3;

	cout << "Three days after date1 is: " << "(" << date3.getYear() << "," << date3.getMonth() << "," << date3.getDay() << ")" << endl;

	date3 = date2 - 3;
	cout << "Three days before date1 is: " << "(" << date3.getYear() << "," << date3.getMonth() << "," << date3.getDay() << ")" << endl;

	tmpdays3 = date1 - date2;
	cout << "Two days apart: " << tmpdays3 << " days" << endl;

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值