오늘은 참조자 문법을 리뷰할려고 한다
참조자는 별명이다 즉 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
}
그럼 참조자는 어디서 활용하느냐?
우리가 클래스를 하나 선언하면 우리는 기존에 제공하는 타입이 아니라 우리가 새로운 클래스를 정의하는 것이기 때문에 클래스 에서의 연산이 불가능하다 즉 연산자 재정의가 필요하다 다음 시간에는 연산자 재정의를 배워보도록 하겠다
'C++' 카테고리의 다른 글
[C++]연산자 오버로딩 (7) | 2023.11.28 |
---|---|
[C++]pure virtual function 와 abstract class (6) | 2023.11.28 |
[C++]클래스를 이용한 학생 성적 관리 프로그램 (2) | 2023.11.22 |
[C++] 상속 부모와 자식 클래스 (0) | 2023.11.21 |
[C언어]구조체를 이용한 학생 성적 관리 프로그램 (1) | 2023.11.19 |