Programming/C_C++

reference (참조자)

gukbap 2011. 7. 14. 23:29
반응형

참조자(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