본문 바로가기
C++

[C++/OOP] 참조자

by cod1ng 2023. 11. 28.

오늘은 참조자 문법을 리뷰할려고 한다 

참조자는 별명이다 즉 int num, string name 등 int * pnum 별도의 메모리 저장공간이 생성 되지 않는다 예를 들어 

void exam1()

{

int num = 10; //exam1 stack메모리 저장공간이 생성이 된다 

int& rnum = num; //rnum : num 의 별명! // 참조자 문법

}

그러면 활용을 어떻게 하느냐 우리는 보통 C언어에서 값 전달 혹은 주소 전달을 한다 값 전달은 값 만 그대로 넘겨줄 때 사용하고 주소 전달은 직접 주소에가서 값을 변환할때 사용된다

1)  값 전달 int num = 10; int num1 = num; // int형 타입 저장 메모리 Call-by-value

2) 주소 전달 int num = 10; int*p = %num; : 주소를 저장하는 메모리 Call-by-reference

3) 참조자 전달 int num = 10; int & rnum = num; // rnum 자체에는 주소를 저장하는 공간이 없다

 

void foo(int n1, int* n2, int& n4)

{

n1 = 11; //foo 함수의 n1의 값 변경! Call-by-value

*n2 = 22; //exam2함수의 n2의 값 변경! ******* Call-by-reference

n4 = 33; //exam2함수의 n4의 값 변경! *******

}

 

void exam2()

{

int n1 = 10, n2 = 20, n3 = 30;

foo(n1, &n2, n3);

cout << n1 << ", " << n2 << ", " << n3 << endl; //10, 22, 33

}

 

그럼 참조자는 어디서 활용하느냐?

우리가 클래스를 하나 선언하면 우리는 기존에 제공하는 타입이 아니라 우리가 새로운 클래스를 정의하는 것이기 때문에 클래스 에서의 연산이 불가능하다 즉 연산자 재정의가 필요하다 다음 시간에는 연산자 재정의를 배워보도록 하겠다