(1) Reference
a라는 이름의 공간에 10을 저장하겠다!. 그런데 a의 공간을 다르게 부를 수 있는 방법이 없을까?
int &b = a를 통해 a가 가리키는 공간을 b라고도 불러보자!
배열은 어떻게 접근할까?
그렇다면, int *a = new int[5]일때(int a[5]은 reference로 참조 할 수 없다), a의 reference인 b를 호출하고자 할 때, 어떻게 선언해야 하는가?
int* &b = a가 된다. 이는 포인터의 reference 의미로 a를 b라고도 부르겠다는 것은 변함이 없다.
함수의 arg에서는 어떻게 쓰이나?
함수의 인자로 배열에 대한 정보를 넘길 때는 call-by-value 값으로 보내는 경우는 대부분 없다. 메모리 복사가 일어나기 때문이다.
이를 대체하고자 일반적으로 배열의 주소나 그 reference를 함수의 인자로 넘겨준다.
포인터 접근
void display(const int *a,int a_size)
{
for(int i = 0; i < a_size; i++)
cout << a[i] <<"\n"
}
ref 접근
void display(int* &ref,int a_size)
{
for(int i = 0; i < a_size; i++)
cout << a[i] <<"\n"
}
struct or class을 활용
struct node{
int node_number;
node* next
node(int your_number) : node_number(your_number), next(NULL){}
}
node *root = new node(3)
...
...
...
위와 같은 struct가 있고 리스트로 연결되어 있다고 하고 탐색하는 함수 display가 있다고 하자
void display(node* &a)
{
if( a == NULL)
return;
while(a->next != NULL){
cout << a->number << "\t
a = a->next
}
}
display(root);
그러나 위와 같이 사용할 수 있으나 굳이 reference를 붙여가면서 쓸 필요는 없다.
함수 반환형이 reference??
int& simple_a(int &a)
{
a++;
return a;
}
입력으로 변수를 reference로 받아서 그 값을 1 증가시키고 reference를 반환하는 함수 simple_a가 있다!! 이 함수는 어떤 변수의 이름을 a라 부르고 "a의 값을 1증가 시키고 a가 가리키는 공간의 명칭을 반환하자~~!" 라는 의미이다. 주의 할 것은 다음 두 가지 케이스!!
int b = 0;
int &c = simple_a(b);
int d = simple_a(b);
c += 100;
cout << "c의 값: " << c <<endl;
cout << "d의 값: " << d << endl;
결과:
c는 변수 b가 가리키는 공간을 'c라고도 부르겠다~~' 라는 의미이고
d는 변수 b가 가리키는 공간을 '내 공간(d)에 복사하겠다!' 라는 뜻이 된다.
출처: https://stackoverflow.com/questions/14047191/overloading-operators-in-typedef-structs-c
https://edykim.com/ko/post/c-operator-overloading-guidelines/
'C++' 카테고리의 다른 글
c++] lambda 표현식을 차근차근 써보자(수정...) (0) | 2019.03.08 |
---|---|
c++] 레퍼런스와 연산자 오버로딩(2) (1) | 2019.03.07 |