木马cj 2017-03-25 14:06 采纳率: 0%
浏览 1553

新人c++,关于类的封装。

直接贴代码。
/*附原题:日期类CDate,包含三个私有成员数据year,month,day(均是整数),分别代表年、月、日。
成员函数的声明如下:(前2个是私有的)
        int IsLeapYear(int y); //返回y年是否闰年,是返回1,否则返回0
        int DaysOfMonth(int y,int m);//返回y年m月的天数
        CDate();//构造函数,默认为2015年5月7日,同时输出信息“Default constructor is called!”
        CDate(int y,int m,int d);//构造函数,年月日分别为y,m,d,同时输出信息“Constructor is called!”
        void SetDate(int y,int m,int d);//设置修改日期为y年m月d日,同时输出信息“Date is reset!"
        int GetYear(); //返回年份
        int GetMonth();  //返回月份
        int GetDay();   //返回日
        void Show();   //按照指定格式(见Sample Output)输出日期信息
        CDate IncOneDay(); //返回本日期后面一天所对应的年月日
设计上述类,并采用下面的main函数进行测试(提交时只需提交除main函数外的代码部分)
int main()
{
    CDate d1;
    d1.Show();
    d1.SetDate(2015,2,28);
    d1.IncOneDay().Show();
    d1.Show();
    CDate d2(2016,12,31);
    d2.Show();
    d1=d2.IncOneDay();
    d1.Show();
    d2.Show();
    d1.SetDate(d2.GetYear(),d2.GetMonth(),d2.GetDay());
    d1.Show();
    return 0;
}
Sample Output
Default constructor is called!
2015-5-7
Date is reset!
2015-3-1
2015-2-28
Constructor is called!
2016-12-31
2017-1-1
2016-12-31
Date is reset!
2016-12-31
*/

 #include <iostream>
using namespace std;

class CDate
{
private:
    int year;
    int month;
    int day;
    int IsLeapYear(int y);//返回y年是否闰年,是返回1,否则返回0
    int DaysOfMonth(int y,int m);//返回y年m月的天数
public:
    CDate();
    CDate(int y,int m,int d);
    void SetDate(int y,int m,int d);
    int GetYear();
    int GetMonth();
    int GetDay();
    void Show();
    CDate IncOneDay();
};
int CDate::IsLeapYear(int y)
{
    if((y%4==0&&y%100!=0)||y%400==0)
        return 1;
    else
        return 0;
}
int CDate::DaysOfMonth(int y,int m)
{
    int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(IsLeapYear(y)&&m==2)
        return a[m-1]+1;
    else
        return a[m-1];
}
CDate::CDate()
{
    year=2015;
    month=5;
    day=7;
    cout<<"Default constructor is called!"<<endl;
}
CDate::CDate(int y,int m,int d)
{
    year=y;
    month=m;
    day=d;
    cout<<"Constructor is called!"<<endl;
}
void CDate::SetDate(int y,int m,int d)
{
    year=y;
    month=m;
    day=d;
    cout<<"Date is reset!"<<endl;
}
int CDate::GetYear()
{
    return year;
}
int CDate::GetMonth()
{
    return month;
}
int CDate::GetDay()
{
    return day;
}
void CDate::Show()
{
    cout<<year<<"-"<<month<<"-"<<day<<endl;
}
CDate CDate::IncOneDay()
{
    day=day+1;
    if(day>DaysOfMonth(year,month))
    {
        if(month<12)
        {
            month+=1;
            day=1;
        }
        else if(month==12)
        {
            year+=1;
            month=1;
            day=1;
        }
    }
    return *this;
}
int main()
{
    CDate d1;
    d1.Show();
    d1.SetDate(2015,2,28);
    d1.IncOneDay().Show();
    d1.Show();
    CDate d2(2016,12,31);
    d2.Show();
    d1=d2.IncOneDay();
    d1.Show();
    d2.Show();
    d1.SetDate(d2.GetYear(),d2.GetMonth(),d2.GetDay());
    d1.Show();
    return 0;
}
  • 写回答

4条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器