홈페이지에 있는 class1002.cpp 파일은 Time이라는 클래스를 선언, 정의하고 사용하는 예를 보여주고 있다. 이번 숙제에서는 이 Time 클래스의 기능을 확장하고 보완하는 것이 목적이다. 현재 Time 클래스는 내부적으로 시, 분, 초 정보를 저장하고 있고, 외부적으로는 생성자와 getter/setter, 그리고 + 오퍼레이터를 구현하고 있다. class1002.cpp 파일을 기반으로 하여 Time클래스에 아래와 같은 기능을 추가 및 보완하여라.

  1. 생성자 Time( int hour, int min, int sec )가 불리면 주어진 값을 저장하기 이전에 hour, min, sec 의 범위를 체크하고, 범위에 맞지 않을 때에는 범위가 벗어난 값 대신에 -1을 저장한다.
    1. 예: Time(3, 100, 20) =⇒ h=3, m=-1, s=20
  2. 새로운 생성자 Time( int sec )을 추가하여라. 그리고 주어진 sec 값이 음수면 s=-1. 만약 sec 값이 60 이상이면 이를 시, 분, 초로 다시 계산해서 h, m, s값을 설정하도록 한다. 단, h가 24 이상이면 24로 나눈 나머지만 취한다. 예를 들어서 sec=3700 이면 h=1, m=1, s=40 으로 설정한다.
  3. operator + 를 다음과 같이 수정한다. 두 Time의 s, m, h 값을 각각 더한 후에도 s와 m이 0에서 59 사이에 있도록 값을 자동으로 조절한다. 단, h 값은 이 경우 24 이상이면 24로 나눈 나머지 값을 취한다.
    1. 예: Time(3, 30, 30) + Time(5, 40, 40) == Time( 9, 11, 10 )
    2. 예: Time(15, 30, 30) + Time(15, 20, 40) == Time( 6, 51, 10 )
  4. 아래 코드처럼 checkTime 함수와 main 함수를 만들어라
#include <iostream>
#include <string>

class Time {
// fill here
};

Time::Time(int hour, int min, int sec)
{
//fill here
}

Time::Time(int sec)
{
//fill here
}

Time operator+( Time t1, Time t2 ) {
// fill here
}

void checkTime( string testname, Time t, int h, int m, int s )
{
    if( t.getHour() == h && t.getMin() == m && t.getSec() == s )
        cout << testname << " passed" << endl;
    else
        cout << testname << "  failed" << endl;
    
}
    
int main() 
{
    Time t1(1, 2, 74);
    checkTime( "test 1", t1, 1, 2, -1 );
        
    Time t2(1, -3, 23);
    checkTime( "test 2", t2, 1, -1, 23 );
     
    Time t3(3700);
    checkTime( "test 3", t3, 1, 1, 40 );
            
    Time t4(3, 30, 30);
    Time t5(5, 40, 40);
    Time t6 = t4 + t5;
    
    checkTime( "test 4", t6, 9, 11, 10 );
    
    Time t7(15, 30, 30);
    Time t8(15, 20, 40);
    Time t9 = t7 + t8;

    checkTime( "test 5", t9, 6, 51, 10 );
    
    system("pause");
}

학생이 선언/정의한 Time 클래스와 위에 제공된코드를 더해서 실행 하면 test 1부터 test 5까지 모두 pass하여야 한다. 한 pass당 2점씩 10점만점.

 
class/os2014f/hw4.txt · Last modified: 2017/06/17 09:36 (external edit) · [Old revisions]
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki