▣ 안녕하세요. 이번장에서는 this포인터를 공부해보도록 하겠습니다.
this 포인터는 말 그대로 포인터를 의미하며 단순한 포인터가 아닌 멤버 함수를 호출한 객체 자신을 가리키는 포인터,
객체 자신에 대한 포인터를 의미합니다.
코드를 작성하며 공부해보도록 하겠습니다.
▣ 기본적인 클래스와 멤버 함수를 만들어주세요.
this->n = n;코드를 보시면 이게 무슨 코드이지?라고 생각하실 거라 생각합니다.
이 코드를 해석하면 this(자신의 객체 주소를 의미하고), ->는 주소에 접근하는 연산자입니다.
그리고 = n 은 멤버 함수에 있는 int n 매개변수의 값을 현재 객체에 있는 멤버 변수에 대입을 하라는 의미입니다.
디버그하고 출력을 해보면 각각 객체마다 지정했던 멤버 함수에 값이 출력되는 걸 확인할 수 있습니다.
▣ 이번에는 this 키워드에 대한 이해를 돕기 위해 다른 코드를 작성해보겠습니다.
작성하고 코드를 풀어보면 sum(Calculator* const add, int n)처럼 매개변수에 Calculator* 포인터 자료형에 add라는 이름으로 포인터 변수 이름을 정하고, int n 매개변수 값을 받아옵니다.
그리고 c1.sum(&c1, 10) 이런식으로 주소를 전달하고 그 주소의 객체에 멤버 변수에 매개변수 값을 지정하고 디버그를 하면 각각 객체마다 멤버 함수를 다르게 접근하여 값이 나오는 걸 확인할 수 있습니다.
그럼 왜 this 키워드를 사용할까요?
▣ 클래스의 멤버 함수의 경우 메모리 공간을 공유하기 때문에 이를 구분하기가 어렵습니다.
멤버 함수가 호출될 때 컴파일러에 의해 객체를 구분할 수 있도록 전달되는 객체의 주소가 있습니다.
그렇기 때문에호출된 멤버 함수는 자신을 호출한 객체가 무엇인지 알 수 있습니다.
코드를 확인해보겠습니다.
▣ 이렇게 this를 출력해보면 각자 다른 객체의 주소가 나오는 걸 확인할 수 있습니다.
this 포인터는 변수이기 때문에 주소 값을 저장하고 있습니다.
'[ C++ ] > - C++ 문법공부' 카테고리의 다른 글
C++ 12장 [함수객체] (1) | 2022.11.03 |
---|---|
C++ 11장 [string] (0) | 2022.10.28 |
C++ 9장 [메모리 할당] (0) | 2022.10.26 |
C++ 8장 [포인터 객체] (0) | 2022.10.20 |
C++ 7장 [인라인 함수] (0) | 2022.10.13 |
댓글