【类与抽象】

本文介绍了一个Date类的设计与实现,该类能够处理日期的基本操作,如获取日期的文本表示、计算前一天和后一天的日期。通过具体的代码示例展示了如何在C++中实现这些功能。

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

设计符合下述要求的日期类(Date),使得下述代码可以正常运行。

  1. 拥有数据成员year、month和day,分别存储年、月、日;
  2. 构造函数接受年、月、日参数并初始化全部数据成员;
  3. 公有成员函数toText()返回一个string对象,该字符串为该日期对象的文字表达,比如“2022-5-20”;
  4. 公有成员函数nextDay()返回一个Date对象,表示该日期的后一天;
  5. 公有成员函数prevDay()返回一个Date对象,表示该日期的前一天。

输入样例:

2000 3 1

说明:依次是年-月-日。

输出样例:

Date: 2000-3-1, Next Day: 2000-3-2, Prev Day: 2000-2-29
#include<iostream>
#include<string>
#include<assert.h>
using namespace std;

//在此定义Date类

int main(){
    int year=2000,month=1,day=1;
    cin>> year>>month>>day;
    Date d(year,month,day);
    cout<<"Date: "<<d.toText();
	cout<<", Next Day: "<<d.nextDay().toText();
	cout<<", Prev Day: "<<d.prevDay().toText();
    return 0;
}

 上为裁判测试程序样例。

class Date{
	private:
	//private可加可不加
		int year,month,day;
	public:
		Date(int y=2000,int m=3,int d=1):year(y),month(m),day(d){}
		//声明有默认参数的构造函数 
		bool leap(int y){
			if(!(y%400)||!(y%4)&&y%100){
				return true;
			}
			else return false;
		}
		//判断平或闰 
		Date nextDay();
		Date prevDay();
		//后一天和前一天
		string toText(); 
};

先创建一个Date类。 

string Date::toText(){
	char t[32];
	sprintf(t,"%d-%d-%d",year,month,day);
	//输出到字符数组中 
	return t;
} 
Date Date::nextDay(){
	Date N;
	int md[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	//平年每月的天数
	if(leap(year)) md[2]=29;
	/*
	三种情况
	1 后一天仍然在同一月内
	2 后一天是下个月第一天
	3 后一天是下一年第一天
	*/
	if(day+1<=md[month]){
		N.day=day+1;
		N.month=month;
		N.year=year;
	} 
	else if(month<12){
		N.day=1;
		N.month=month+1;
		N.year=year;
	}
	else if(month==12){
		N.day=1;
		N.month=1;
		N.year=year+1;
	}
	return N; 
}
Date Date::prevDay(){
	Date P;
	int md[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	if(leap(year)) md[2]=29;
	//判断是否是闰年 
	/*
	三种情况
	1 前一天仍然在同一月内
	2 前一天是上个月最后一天 
	3 前一天是上一年最后一天
	*/
	if(day-1>1){
		P.day=day-1;
		P.month=month;
		P.year=year;
	} 
	else if(month>1){
		P.day=md[month-1];
		P.month=month-1;
		P.year=year;
	}
	else if(month==1){
		P.day=31;
		P.month=12;
		P.year=year-1;
	}
	return P;
}

将函数补充完整即可。 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值