[C++] 참조 반환

Programming/C++ Language 2010. 7. 31. 16:54
C++ 의 문법 중의 하나인, 참조변수가 있다. 이를 잘못 사용하게 되면 객체지향의 규칙을 깨버릴 수 있다. 그리고, 컴파일 에러는 전혀 나지 않는다. 한번 살펴 보도록 하자.

Times.h
class CTimes
{
public:
   CTimes( int = 0, int = 0, int = 0 );
   ~CTimes();
   int& GetHour();
   void Print();

private:
   int hour;
   int minute;
   int second;
};

Times.cpp
int& CTimes::GetHour()
{
return hour;
}

void CTimes::Print()
{
cout << "hour is " << hour << endl;
}

위와 같이 Times 클래스가 선언이 되어 있고, GetHour 유틸리티 함수는 int형이 아니라 int& 즉, int 참조변수형을 리턴하고 있다.
이제, 아래의 Main 문을 보도록 하자. 세번의 출력 결과를 예상해 보자.

main.cpp
int main()
{
Ctimes time( 1, 2 );
time.Print();

int a = time.GetHour();
a = 5;
time.Print();

int& b = time.GetHour();
b = 10;
time.Print();

return 0;
}

출력 결과는 아래와 같다..( 상자 안을 마우스로 클릭하여 영역을 잡으면 보인다. )

hour is 1
hour is 1
hour is 10


즉, 참조 변수 형으로 변수를 받게 되면 참조형 변수는 private, public 여부에 관계없이 변경을 할 수 있다. 물론 Get 함수에서 포인터로 변수의 주소를 넘겨줄 경우, 받는 쪽에서 private 이든, public 이든 관계없이 이를 변경 시킬수 있다. 클래스 캡슐화를 위반하는 문법을 사용 하는 것을 피하도록 하자.

값을 받아서 사용 할 때의 문법상의 차이점 말고는 실질적인 원리는 어떻게 다른지 잘 모르겠다. 알아봐야겠다. :)

설정

트랙백

댓글