2014-06-11 2 views
-3

서문을 쓰려면 숙제가 있어야하며 답변을 찾는 것이 아니라 약간의 방향을 찾고 있습니다. 실험실 교사에게 도움을 요청할 수 없기 때문입니다. 내 문제는 내가 변경할 수없는 미리 정의 된 클래스 선언이 주어 졌다는 것입니다. 세 번째 시간 객체와 같도록 두 시간 객체를 추가해야합니다.오버로드 + 연산자 C++

time3 = time2 + time1; 이

Time Time :: operator + (const Time time2) 
{ 
    Time::addSeconds(time1.second); 
    Time::addMinutes(time1.minute); 
    Time::addHours(time1.hour); //changes hrs and days 

    return *this; 
}; 

그래서 나는 시간 1이 동일 무엇으로 TIME2를 전환하는 할당 할 *이 연산자를 사용하고 시간 1 년 내 추가 기능을 추가처럼

내 오버로드 기능을 보인다. 그래서 그것은 작동하지 않습니다. 클래스 정의를 변경할 수 있다면 어떻게해야하는지 알지만, 할 수는 없습니다. 내 의도는 * this가 time3을 참조하는 것이었지만, 방정식의 왼쪽을 참조합니다.

클래스의 구조를 변경하지 않고도 함수를 추가 할 때 time3을 같게 만들려면 어떻게해야합니까?

이 상황을 처리 할 수있는 적절한 방법을 보여주는 리소스를 찾을 수 없지만 어떤 것이 있으면 읽을 수있을 것입니다.

+0

'* this'는 분명히 연산자가 아닙니다. 그리고'operator + ='를 사용하여'operator +'를 구현해야합니다. – chris

+1

시간은 어디에서 오는거야? 또한이 수업에 필요한 교과서가 없습니까? – ChiefTwoPencils

+0

물어보기 전에 검색을 시도 했습니까? 여기에 스택 OVerflow : http://stackoverflow.com/a/4421719/3651800에 연산자 오버로드에 꽤 좋은 기록이야. 또한 웹 –

답변

2

이 인스턴스는 두 개체를 똑같이 처리하는 이진 연산자입니다. 이것은 무료 함수로 구현되어야합니다. 구조는 다음과 같습니다.

Time operator + (const Time &time1, const Time &time2) 
{ 
    Time t3 = time1; 
    t3.addSeconds(time2.second); 
    t3.addMinutes(time2.minute); 
    t3.addHours(time2.hour); 
    //don't know how these functions work... 

    return t3; 
}; 
+0

대개 답장을하지 않는 것이 가장 좋으며, 원래의 포스터는 코드를 찾지 않고 정보 만 찾고 있다고 말했습니다. –

+0

프리 스탠딩/비 멤버 함수를 사용하려면'Operator +'에서'Time ::'접두어를 제거해야합니다. 'addSeconds' 등의 함수가 당신이 가정 한대로 작동하는 것은 그럴듯하지 않습니다. 't3 = time2.addHours (time1.hour);'오른쪽에있는 표현식이 기존 값에 접근 할 수있는 참조 방법이 없다. 나는 그것이 operator + (Time time1, const Time & time2) {time1.addSeconds (time2.second); 일 필요가있다. time1.addMinutes (time2.minute); time1.addHours (time2.hour); return time1; }'by-value 매개 변수는 고의로 복사본을 만듭니다. –