C++

C++ 연습문제 9.2

wooob 2021. 10. 30. 23:42
728x90

시간으 나타내는 Time 클래스를 만들어 보자. Time 클래스에는 시(int hour_), 분(int minute_), 초(int second_)를 나타내는 멤버 변수를 포함하고 있다. 다음 main 함수와 실행 결과를 참고하여 두 객체 사이의 + 연산이 가능하도록 만들어 보라.

 

main.cpp : 

#include <iostream>
#include "time.h"
using namespace std;

int main() {
	Time time1(4, 50, 40);
	Time time2(3, 40, 30);
	Time time3 = time1 + time2;

	time1.Print();
	time2.Print();
	time3.Print();

	return 0;
}

 

내 코드(time.h) : 

#include <iostream>
using namespace std;

class Time {
private:
	int hour_, min_, sec_;

public:
	Time(int hour, int min, int sec) {
		hour_ = hour;
		min_ = min;
		sec_ = sec;
	}
	/*
	Time operator+(const Time& time) {
		int h = hour_ + time.hour_;
		int m = min_ + time.min_;
		int s = sec_ + time.sec_;

		if (h > 25)
			h -= 24;
		if (m >= 60) {
			h++;
			m -= 60;
		}
		if (s >= 60) {
			m++;
			s -= 60;
		}

		return Time(h, m, s);
	*/

	Time operator+(const Time& time) {
		if (hour_ + time.hour_ > 25) {
			if (min_ + time.min_ >= 60) {
				if (sec_ + time.sec_ >= 60)
					return Time(hour_ + time.hour_ - 24 + 1, min_ + time.min_ - 60 + 1, sec_ + time.sec_ - 60);
				else
					return Time(hour_ + time.hour_ - 24 + 1, min_ + time.min_ - 60, sec_ + time.sec_);
			}
			else {
				if (sec_ + time.sec_ >= 60)
					return Time(hour_ + time.hour_ - 24, min_ + time.min_ + 1, sec_ + time.sec_ - 60);
				else
					return Time(hour_ + time.hour_ - 24, min_ + time.min_, sec_ + time.sec_);
			}
		}
		else {
			if (min_ + time.min_ >= 60) {
				if (sec_ + time.sec_ >= 60)
					return Time(hour_ + time.hour_ + 1, min_ + time.min_ - 60 + 1, sec_ + time.sec_ - 60);
				else
					return Time(hour_ + time.hour_ + 1, min_ + time.min_ - 60, sec_ + time.sec_);
			}
			else {
				if (sec_ + time.sec_ >= 60)
					return Time(hour_ + time.hour_, min_ + time.min_ + 1, sec_ + time.sec_ - 60);
				else
					return Time(hour_ + time.hour_, min_ + time.min_, sec_ + time.sec_);
			}
		}
	}

	void Print() {
		cout << hour_ << "시 " << min_ << "분 " << sec_ << "초" << endl;
	}
};

다른 변수를 만들면 안될 거 같아서 중첩 if-else문으로 구현하긴 했는데,,, 흠

728x90