私は単純なカレンダークラスを書いています。operator++
カレンダーを次の月に移動するために使用するためにオーバーロードしようとしています。ただし、翌月の開始日を見つけるアルゴリズムは正しくありません。
calendar calendar::operator ++(int)
{
int hold;
calendar cal = *this;
month++;
if (month > December)
{
month = January;
year++;
if (year == 0)
year++;
}
previousStartDay = startDay;
startDay = nextStartDay;
nextStartDay = findNextStartDay();
return cal;
}
int calendar::findNextStartDay() const
{
int monthLength,
day = startDay;
monthLength = findMonthLength(false);
monthLength -= 28;
day += monthLength;
if (day > Saturday)
day -= Saturday;
return day;
}
1 月は 0、12 月は 11、日曜日は 0、土曜日は 6 と定義されます。startDay、previousStartDay、nextStartDay、month、および year はすべてプライベート クラス変数です。
これを 2013 年にテストすると、日付は 3 月まで正確です。その時点で、次の開始日が月曜日ではなく火曜日になります。
私もこれを試しました:
int calendar::findNextStartDay() const
{
int monthLength,
day = startDay;
monthLength = findMonthLength(false);
monthLength -= 28;
day -= monthLength;
if (day < Sunday)
day += Saturday;
return day;
}
ただし、同じ結果も得られます。
編集:
うるう年を考慮しています。findMonthLength()
これがそうであるかどうかを判断するための私のコードです。
if ((!(year % 4) && (year % 100)) || !(year % 400))
monthLength = 29;
else
monthLength = 28;