在我们学习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循环,但我没有解决问题,因为在那个重叠的运算符函数我我还在使用很多条件。
有一些优雅的方法吗?代码和解释会很棒!谢谢!
答案 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;
}
};