게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[질문]연산자 오버로딩과 연산자 연계 호출에 대해서 질문점....
게시물ID : programmer_14509짧은주소 복사하기
작성자 : 우와우와우왕
추천 : 0
조회수 : 503회
댓글수 : 7개
등록시간 : 2015/11/19 14:56:19
옵션
  • 본인삭제금지
#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)
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호