참조자(reference)
target에 대한 또다른 이름을 행사.
target의 형을 쓰고 참조연산자(&) 다음에 참조자의 이름을 씀으로써 참조자를 만든다.
ex) int &rSomeRef = someInt;
rSomeRef는 someInt를 참조하도록 초기화된 정수형 참조자.
참조 연산자(&)는 주소 연산자(&)와 같은 기호이지만 같은 연산자가 아니다.
하지만 둘은 상당히 관련이 있다.
참조자의 주소 = target의 주소
->가리키고 있는 것에 대한 또다른 이름이기 때문이다.
C++에서는 참조자 그 자체의 주소에 접근하는 방법을 제시하지 않는다.
-> 이는 의미가 없기 때문 -> 참조자는 target에 대한 동의어로 여겨지기 때문
class에서도 참조자 사용가능
person이라는 class가 있다 치자.
person relilau;
person의 참조자를 다음과 같이 선언할 수 있다.
person &sodka = relilau;
하나의 객체에 두 개의 식별자가 객체에 접근.
sodka에 변화를 가하면 relilau에도 변화에 가해진다.
class에 쓰일 때는 객체 그 자체처럼 사용하면 된다.
재치환은 하지말자.
ex)
int a;
int &b = a;
int c;
b = c; //이는 a =c;와 같은 의미가 되므로 a = c;를 하는 것이 된다. 이는 그저 c의 값을 a에 올기는 의미에 불과하게 된다.
널 포인트와 널 참조자.
포인터가 초기화되지 않거나 삭제되었을 때 NULL로 치환.
참조자는 NULL이 될수가 없다. 대부분의 컴파일러에서는 널 참조자를 오류 메시지 없이 지원하지만 실제로는 동작이 잘 되지 않는다.
C++에서는 참조가가 더 선호된다. 말끔하고, 사용하기 쉽고, 정보 은닉(Information Hiding)을 수행할 수 있기 때문이다.
ex)
//포인터 사용
int func (*px, *py);
int main()
{
int x, y;
x = 1;
y = 1;
cout << func (&x, &y);
return 0;
}
int func (*px, *py)
{
return *px + *py;
}
//참조자 사용
int func (&rx, &ry);
int main()
{
int x, y;
x = 1;
y = 1;
cout << func (x, y);
return 0;
}
int func (&rx, &ry)
{
return rx + ry;
}
C++ 실현하고자 하는 프로그래머가 여러 부속품들을 자신의 뜻대로 조합하여 하나의 결과물을 만드는 것을 실현시키고자 할 때 프로그래머가 함수 내부에서 어떤 일이 일어나는지 몰라야 된다. 포인터는 이를 방해시키는 요소지만, 참조자는 이를 훌륭히 수행시킬 수 있다.
참조자는 NULL이 될 수가 없다.
즉, 참조자가 NULL로 채워져야 할 경우 포인터를 사용해야한다.
int *a = new int;
if ( a != NULL)
int &ra = *a
'Programming > C_C++' 카테고리의 다른 글
전처리기 활용 ** (0) | 2011.08.17 |
---|---|
전처리기 (0) | 2011.08.17 |
ture, false (0) | 2011.07.18 |
객체 초기화 (0) | 2011.07.17 |
c main (0) | 2011.07.14 |