생각 해볼 문제(modoocode C++)
문제 1
여러분은 아래와 같은 Date 클래스를 디자인 하려고 합니다. SetDate 는 말그대로 Date 함수 내부를 초기화 하는 것이고 AddDay, AddMonth, AddYear 는 일, 월, 년을 원하는 만큼 더하게 됩니다. 한 가지 주의할 점은 만일 2012 년 2 월 28 일에 3 일을 더하면 2012 년 2 월 31 일이 되는 것이 아니라 2012 년 3 월 2 일이 되겠지요? (난이도 : 上)
class Date {
int year_;
int month_; // 1 부터 12 까지.
int day_; // 1 부터 31 까지.
public:
void SetDate(int year, int month, int date);
void AddDay(int inc);
void AddMonth(int inc);
void AddYear(int inc);
void ShowDate();
};
풀이
문제가 요구하는 것은 간단하게 그냥 멤버함수들을 만들어서 날짜 계산하는 프로그램을 만들면 되는 것이지만, 나는 선행학습을 했기 때문에 좀 더 추가해서 Date date; date.setDate(2022,01,15); 처럼 객체 생성 후 초기화가 아닌 Date date(2022,01,15);처럼 객체의 생성과 동시에 초기화를 추가했다. /* ~ */ 부분이 객체를 생성 후 초기화하는 코드다.
#include <iostream>
using namespace std;
class Date
{
private:
int year, month, day;
public:
int getMonthsMaxDay(int year, int month) const //cosnt 멤버 함수
{
int months[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
if(month==2)
{
if((year%4)==0&&(year%100)==0)
{
months[1]=29;
}
}
return months[month-1];
}
/* void setDate(int year, int month, int day)
{
if(getMonthsMaxDay(year,month)<day||month>12)
{
cout<<"Error! Invalid Date!"<<endl;
return;
}
year=year;
month=month;
day=day;
cout<<"Date Set!"<<endl;
}*/
Date(int _year, int _month, int _day): year(_year),month(_month),day(_day)
{
if(getMonthsMaxDay(year,month)<day||month>12)
{
cout<<"Error! Invalid Date!"<<endl;
return;
}
cout<<"Date Set!"<<endl;
}
void addDay(int add)
{
day+=add-1;
while(day>getMonthsMaxDay(year,month))
{
day-=getMonthsMaxDay(year,month);
addMonth(1);
}
}
void addMonth(int add)
{
month+=add;
while(month>12)
{
month-=12;
addYear(1);
}
}
void addYear(int add)
{
year+=add;
}
void showDate()
{
cout<<"Now Date() : "<<year<<"년 "<<month<<"월 "<<day<<"일"<<endl;
}
};
int main(void)
{
/*Date date;
date.setDate(2022,01,15);*/
Date date(2022,01,15);
date.addDay(299);
date.showDate();
}
출력 화면
Date Set!
Now Date() : 2022년 11월 9일 //찐전역일...ㅠㅠㅠ
문제가 원하는 답
int main(void)
{
Date date(2012,02,28);
date.addDay(3);
date.showDate();
}
출력 화면
Date Set!
Now Date() : 2012년 3월 2일
'Cpp > 모두의코드' 카테고리의 다른 글
씹어먹는 C++ - <4 - 2. 클래스의 세계로 오신 것을 환영합니다. (함수의 오버로딩, 생성자)> (0) | 2022.01.16 |
---|