Cpp/모두의코드

씹어먹는 C++ - <4 - 1. 이 세상은 객체로 이루어져 있다>

둠치킨 2022. 1. 15. 19:37

생각 해볼 문제(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일