更改特定天数的日期功能

时间:2017-06-01 12:34:11

标签: c++ function class date

在我们学习C ++的课程中,我获得了一个课程,即#34; date"。现在,有一个特定的功能,我需要做,但我真的不知道如何处理这个。班级成员是日,月和年。函数需要一些代表天数的整数,并且应该设置一个新的日期,在那么多天之后。例如,如果日期是(DD-MM-YY)20.01.2015,并且我们作为参数传递15,新日期是04.02.2015,问题是我必须考虑每个月有多少天(考虑到二月有28天),如果争论太大,我们将进入明年,创建一个例外,打印到明年有多少天(考虑到一年有365天)。也就是说,如果日期是20.12.2010,并且参数大于11,则应打印11。

我的尝试是使用while,我在开头声明int k = 0;并且函数的参数是 a ,而不是我使用的时间(k!= a),但是函数的主体真的很混乱,因为如果条件我使用的太多了。我尝试的另一件事是重叠 operator ++ ,这肯定会给我更简单的功能,因为它内部只有一个for循环,但我没有解决问题,因为在那个重叠的运算符函数我我还在使用很多条件。

有一些优雅的方法吗?代码和解释会很棒!谢谢!

2 个答案:

答案 0 :(得分:0)

只需识别您需要的内容然后创建它,例如

static unsigned int Date::days_of_month(const Month month, const unsigned int year);
void Date::operator+=(const unsigned int days);

+ =可能看起来像

void Date::operator+=(const unsigned int days){
    increase current day by days
    check if current day too large
    if so, increase month (and maybe year)
    repeat until day legal
}

概念很清楚? Haven不是故意建立你的输出,为你提供一些事情,毕竟,这是一个练习。出于同样的原因,也故意在伪代码中写这个。尝试创建一些代码,如果你真的无法继续,我会添加实际的代码。

答案 1 :(得分:0)

const int m_daysInMonth[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; //   first for index offset (no "zero" month)
class date {
public:

int days=20, month=11, year=2012;
void addDays(int daysNum)
{
    int n_days = days, n_month = month; //new result. not saved, if there is an exception
    while (daysNum > 0)
    {
        int daysToNextMonth = m_daysInMonth[n_month] - n_days + 1; //days before needs to change motn index
        if (daysToNextMonth < daysNum) // change month
        {
            daysNum -= daysToNextMonth;
            n_month++;
            if (n_month > 12)
            {
                int daysLeft = m_daysInMonth[month] - days ;
                n_month = month + 1;
                while (n_month <= 12)
                {
                    daysLeft += m_daysInMonth[n_month];
                    n_month++;
                }
                throw daysLeft;
            }
            n_days = 1; // start of the month

        }
        else // set day in the month
        {
            n_days += daysNum;
            daysNum = 0;
        }
    }
    days = n_days;
    month = n_month;

}

};