#include <iostream>
using namespace std;
class Time
{
private:
int hour;
int min;
int sec;
public:
const Time operator+(Time);
Time& operator++();
void Outtime();
};
const Time Time::operator+(Time &time)
{
Time C;
C.sec=sec+time.sec;
C.min=min+time.min;
C.hour=hour+time.hour;
C.min+=C.sec/60;
C.sec%=60;
C.hour=C.min/60;
C.min%=60;
return C;
}
Time& Time::operator++()
{
sec++;
min+=sec/60;
sec%=60;
hour=min/60;
min%=60;
return *this;
}
Time 이라는 클래스에 대해서 똑같은 타입간의 합과 전위 연산자++ 에 대해서 연산자 오버로딩을 한 모습입니다.
제가 여기서 궁금한것은
왜 둘의 타입이 각각 값과 레퍼런스로 나뉘어 젔음에도 둘다 연산의 연계가 가능하느냐 입니다.
우선 +오버로딩을 보시면
값으로 반환했음에도 불구하고
Time A,B,C,D;
D=A+B+C;
위의 코드에서
A+B의 결과 반환된 값을 이용해서 곧바로 +C 까지의 연산이 가능하다는 것입니다.
하지만 ++오버로딩에서
반환타입을 레퍼런스가 아닌 값으로 바꾸게 되면
++++A;
와 같은 연산이 연계해서 사용 불가능하고 1만 상승하게 되더군요...
결론적으로는
operator+와 operator++ 둘다 값을 반환하도록 코딩하였을때
왜 operator+는 연산의 연계가 가능하며(D=A+B+C)
operator++는 왜 연산의 연계가 불가능 한것인가요??(++A)