2014-11-13 1 views
0

상속을 사용하여 날짜 및 시간 클래스를 만들려고합니다.C++ : 생성자 : 부모 클래스 매개 변수 및 새 인스턴스의 값 설정

상위 클래스 인 날짜에는 월, 일 및 연도가 있습니다.

날짜 파생 클래스 인 DateTime에는 동일한 변수가 있지만 시간, 분 및 초가 추가됩니다. DateTime 인스턴스가 만들어지면 Date 인스턴스와 선택적 매개 변수 hour, minute 및 second를 전달해야합니다. Date 매개 변수는 필수 항목입니다. 선택적 매개 변수가 전달되지 않으면 기본값 0이 적용됩니다.

더 효과적인 구현 방법이 있습니까? 새로운 DateTime 인스턴스의 Date 인스턴스에있는 함수를 사용하여 매개 변수를 검색하여 매개 변수를 다시 설정하는 것이 지루한 것처럼 느껴집니다.

DateTime::DateTime(Date passDate){ 
    day = passDate.getDay(); 
    month = passDate.getMonth(); 
    year = passDate.getYear(); 
    hour = 0; 
    minute = 0; 
    second = 0; 
} 

DateTime::DateTime(Date passDate, int hourSet){ 
    day = passDate.getDay(); 
    month = passDate.getMonth(); 
    year = passDate.getYear(); 
    hour = hourSet; 
    minute = 0; 
    second = 0; 
} 

DateTime::DateTime(Date passDate, int hourSet, int minuteSet){ 
    day = passDate.getDay(); 
    month = passDate.getMonth(); 
    year = passDate.getYear(); 
    hour = hourSet; 
    minute = minuteSet; 
    second = 0; 
} 
+0

이 작업을보다 쉽게 ​​수행하려면 복사 생성자와 할당 연산자를 정의해야합니다. –

+1

'Date' 클래스에 복사 생성자가 있습니까? – kraskevich

답변

0

당신은 하나의 생성자를하기 위해 기본 생성자 매개 변수를 사용할 수 있습니다. hourSet=0, minuteSet 또는 secondSet 파라미터 중 하나가 생략되는 경우

DateTime::DateTime(Date passDate, int hourSet=0, int minuteSet=0, int secondSet=0) { 
    day = passDate.getDay(); 
    month = passDate.getMonth(); 
    year = passDate.getYear(); 
    hour = hourSet; 
    minute = minuteSet; 
    second = secondSet; 
} 

는 그들이 0 자동으로 교체한다.

1

당신은 당신의 코드가 훨씬 더 간결하게 부모 클래스의 생성자와 기본 매개 변수 값을 호출 할 수 있습니다

DateTime::DateTime(const Date& passDate, int hourSet = 0, int minuteSet = 0): 
    Date(passDate) { 
    hour = hourSet; 
    minute = minuteSet; 
    second = 0; 
} 
+0

'Date' 복사 생성자를 정의하는 것을 잊지 마세요 –

+0

@VadimProzorov 예, 복사 생성자가있는 경우에만 작동합니다. 의문의 여부에 대해서는 분명하지 않다. – kraskevich

0

당신은 입력 값의 적절한 검증과 두 클래스의 복사 생성자와 할당 연산자를 제공해야합니다.

기본 및 파생 모두에 대해 getters/setters를 구현하면됩니다.

관련 문제