검색결과 리스트
참조변수에 해당되는 글 2건
- 2010.07.31 [C++] 참조 변수 1
- 2010.07.31 [C++] 참조 반환
글
[C++] 참조 변수
Programming/C++ Language
2010. 7. 31. 17:22
참조 반환에 이어 참조 변수에 대해 알아보자.
참조 변수는 DataType& 를 이용하여 선언을 한다. 그리고, 어떤 변수의 참조를 가지도록 초기화할 때는 변수를 선언 할 때만 가능하다.
아래의 코드를 보고, 결과를 예상해 보자.
결과는 아래와 같다.( 상자 안을 마우스로 클릭하여 영역을 잡으면 보인다. )
결과 처럼, nRef = b 구문을 실행 할 떄는 nRef 가 b 변수를 참조 하는 것이 아니라, 이미 nRef 는 a 변수를 참조 하고 있으므로, b의 값을 a 에 대입을 하게 된다.
이러한 참조변수를 이용하여 Call by Reference 를 이용 할 수 있다. C에서는 Call by Reference 를 이용하기 위해서 포인터 변수를 사용했지만, C++ 에서는 대신에 참조변수를 이용하면 된다.
-> void Func( int& param1 ) {}
참조 변수는 DataType& 를 이용하여 선언을 한다. 그리고, 어떤 변수의 참조를 가지도록 초기화할 때는 변수를 선언 할 때만 가능하다.
아래의 코드를 보고, 결과를 예상해 보자.
int a = 10, b = 20;
int& nRef = a;
cout << "a is " << a << endl;
nRef = 100;
cout << "a is " << a << endl;
nRef = b;
cout << "a is " << a << endl;
cout << "b is " << b << endl;
int& nRef = a;
cout << "a is " << a << endl;
nRef = 100;
cout << "a is " << a << endl;
nRef = b;
cout << "a is " << a << endl;
cout << "b is " << b << endl;
결과는 아래와 같다.( 상자 안을 마우스로 클릭하여 영역을 잡으면 보인다. )
a is 10
a is 100
a is 20
b is 20
a is 100
a is 20
b is 20
결과 처럼, nRef = b 구문을 실행 할 떄는 nRef 가 b 변수를 참조 하는 것이 아니라, 이미 nRef 는 a 변수를 참조 하고 있으므로, b의 값을 a 에 대입을 하게 된다.
이러한 참조변수를 이용하여 Call by Reference 를 이용 할 수 있다. C에서는 Call by Reference 를 이용하기 위해서 포인터 변수를 사용했지만, C++ 에서는 대신에 참조변수를 이용하면 된다.
-> void Func( int& param1 ) {}
'Programming > C++ Language' 카테고리의 다른 글
[C++] 동적바인딩( Dynamic binding ) (0) | 2011.01.03 |
---|---|
[C++] this 포인터 사용하기 (0) | 2010.07.31 |
[C++] 참조 반환 (0) | 2010.07.31 |
[C++] 클래스 I (0) | 2010.07.21 |
[C++] C++상에서 발생하는 name mangling에 관한 내용 (0) | 2010.07.16 |
글
[C++] 참조 반환
Programming/C++ Language
2010. 7. 31. 16:54
C++ 의 문법 중의 하나인, 참조변수가 있다. 이를 잘못 사용하게 되면 객체지향의 규칙을 깨버릴 수 있다. 그리고, 컴파일 에러는 전혀 나지 않는다. 한번 살펴 보도록 하자.
Times.h
Times.cpp
위와 같이 Times 클래스가 선언이 되어 있고, GetHour 유틸리티 함수는 int형이 아니라 int& 즉, int 참조변수형을 리턴하고 있다.
이제, 아래의 Main 문을 보도록 하자. 세번의 출력 결과를 예상해 보자.
main.cpp
출력 결과는 아래와 같다..( 상자 안을 마우스로 클릭하여 영역을 잡으면 보인다. )
즉, 참조 변수 형으로 변수를 받게 되면 참조형 변수는 private, public 여부에 관계없이 변경을 할 수 있다. 물론 Get 함수에서 포인터로 변수의 주소를 넘겨줄 경우, 받는 쪽에서 private 이든, public 이든 관계없이 이를 변경 시킬수 있다. 클래스 캡슐화를 위반하는 문법을 사용 하는 것을 피하도록 하자.
값을 받아서 사용 할 때의 문법상의 차이점 말고는 실질적인 원리는 어떻게 다른지 잘 모르겠다. 알아봐야겠다. :)
Times.h
class CTimes
{
public:
CTimes( int = 0, int = 0, int = 0 );
~CTimes();
int& GetHour();
void Print();
private:
int hour;
int minute;
int second;
};
{
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()
{
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;
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
hour is 1
hour is 10
즉, 참조 변수 형으로 변수를 받게 되면 참조형 변수는 private, public 여부에 관계없이 변경을 할 수 있다. 물론 Get 함수에서 포인터로 변수의 주소를 넘겨줄 경우, 받는 쪽에서 private 이든, public 이든 관계없이 이를 변경 시킬수 있다. 클래스 캡슐화를 위반하는 문법을 사용 하는 것을 피하도록 하자.
값을 받아서 사용 할 때의 문법상의 차이점 말고는 실질적인 원리는 어떻게 다른지 잘 모르겠다. 알아봐야겠다. :)
'Programming > C++ Language' 카테고리의 다른 글
[C++] this 포인터 사용하기 (0) | 2010.07.31 |
---|---|
[C++] 참조 변수 (1) | 2010.07.31 |
[C++] 클래스 I (0) | 2010.07.21 |
[C++] C++상에서 발생하는 name mangling에 관한 내용 (0) | 2010.07.16 |
[C++] Errors : cannot allocate an object of abstract type '???' (0) | 2010.06.14 |