日付の差を求めるプログラムを作りたいのですが、
下のプログラムにメンバ関数sub()を加えて、
うるう年は考慮しなくて良く、
引数で渡される方が、古い日付であることを仮定して良いのですが
どこをどうすれば成立するのでしょうか...?
コンストラクタを使用すると思うのですが...
#include <iostream>
using namespace std;
class Date {
private:
int year;
int month;
int day;
public:
Date(int y, int m, int d) {
if (set(y, m, d) != 0) {
year = 0;
month = 0;
day = 0;
}
}
int set(int y, int m, int d) {
int cm[] = { 0, 31, 28, 31, 30,
31, 30, 31, 31, 30, 31, 30, 31 };
if (!(1 <= m && m <= 12)) {
return 1;// 月が間違い
}
if (!(1 <= d && d <= cm[m])) {
return 1;// 日が間違い
}
year = y;
month = m;
day = d;
return 0;
}
void get(int &y, int &m, int &d) {
y = year;
m = month;
d = day;
}
void next() {
int cm[] = { 0, 31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31 };
day++;
if (cm[month] < day) {
day = 1;
month++;
if (12 < month) {
month = 1;
year++;
}
}
}
};
int main()
{
int yy, mm, dd;
cin >> yy >> mm >> dd;
Date d1(yy, mm, dd);
d1.get(yy, mm, dd);
if (yy == 0 && mm == 0 && dd == 0) {
cout << "正しく設定されていません" << endl;
return 1;
}
cin >> yy >> mm >> dd;
Date d2(yy, mm, dd);
d2.get(yy, mm, dd);
if (yy == 0 && mm == 0 && dd == 0) {
cout << "正しく設定されていません" << endl;
return 1;
}
d1.get(yy, mm, dd);
cout << yy << "年" << mm << "月" << dd << "日から";
d2.get(yy, mm, dd);
cout << yy << "年" << mm << "月" << dd << "日までは";
cout << d2.sub(d1) << "日です" << endl;
return 0;
}