云计算百科
云计算领域专业知识百科平台

面向对象程序设计-类与对象2-日复一日 - 《C++编程基础及应用》- 习题13-2

作者 海洋饼干叔叔

单位 重庆大学

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

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

    #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() << ", Next Day: " << d.nextDay().toText()
    << ", Prev Day: " << d.prevDay().toText();
    return 0;
    }

    输入样例:

    2000 3 1

    输出样例:

    Date: 2000-3-1, Next Day: 2000-3-2, Prev Day: 2000-2-29

    提示:需要注意闰年,闰年2月有29天,平年28天。
    闰年判定函数:

    bool isLeapYear(int year){
    //四年一闰,百年不闰,四百年又闰
    if (year%400==0)
    return true;
    else if (year%100==0)
    return false;
    else if (year%4==0)
    return true;
    else
    return false;
    }

    请注意:函数题只需要提交相关代码片段,不要提交完整程序。

    参考示例:

    bool isLeapYear(int year){
    if(year%400==0) return true;
    else if(year%100==0)
    return false;
    else if(year%4==0)
    return true;
    return false;
    }
    class Date{
    private:
    int year,month,day;
    public:
    Date(int y,int m,int d):year(y),month(m),day(d){}
    string toText(){
    return to_string(year)+"-"+to_string(month)+"-"+to_string(day);
    }
    Date nextDay(){
    int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int y=year,m=month,d=day+1;
    int maxDay =mon[m-1];
    if(m==2 && isLeapYear(y))
    maxDay=29;
    if(d>maxDay){
    d=1;m++;
    }
    if(m>12){
    m=1;y++;
    }
    return Date(y,m,d);
    }
    Date prevDay(){
    int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int y=year,m=month,d=day-1;
    if(d<1){
    m–;
    if(m<1){
    m=12;y–;
    }
    int maxDay=mon[m-1];
    if(m==2 && isLeapYear(y)) maxDay=29;
    d = maxDay;
    }
    return Date(y,m,d);
    }
    };

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 面向对象程序设计-类与对象2-日复一日 - 《C++编程基础及应用》- 习题13-2
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!