this
: 자기 자신 object 의 주소를 가리키는 상수 포인터
위 함수의 실제 signature 는 다음과 같다.
따라서 p.set(0, 0); 을 호출하면, set(&p, 0, 0); 으로 변경되서
memory 의 text 영역에 객체 p의 stack 주소를 알 수 있게 한다.
모두가 잘 아는 얘기지만
memory 는 heap, stack, data, text 영역으로 나뉘고
Point class 의 set function 은 text 영역으로 할당된다.
그리고 Point의 x, y 멤버 변수는 stack 영역에 할당된다.
static 변수와 this 의 관계를 살펴보자.
정적 멤버 함수는 왜 멤버 변수를 참조할 수 없는 것일까?
정적 멤버 함수는 Clazz 의 namespace 에 속해있는 전역 함수이다.
하지만 Clazz 의 namespace 에 속해 있다고 해서 this 키워드를 사용할 수 있는 것은 아니다.
정적 멤버 함수는 this 가 없어 this 키워드를 사용할 수 없다.
static_value 는 전역 변수이므로 this 없이 접근이 가능하다.
this->member_value = 0;으로 바뀌는데 this 로 참조할 수 없으니 에러가 난다.
반면 멤버 함수는 당연하게도 this 를 참조할 수 있어 멤버 변수, 정적 변수에 모두 접근할 수 있다.
2015년 9월 30일 수요일
피드 구독하기:
댓글 (Atom)
[C++] meta programing
재귀 호출에 관해 template meta programming 을 적용한 예제를 살펴보자. #include using namespace std; int fact(int n){ if(n factorial 연산을 하는 일반적인 재귀 호출 함...
-
Smart Pointer : 포인터처럼 동작하며 자동으로 메모리를 해제하고 안전하게 resource를 관리하도록 돕는 객체 포인터는 소멸자가 호출되지 않아 memory leak이 발생한다. Java, C#같은 VM이 있는 언어는 VM에서 G...
-
Template specialization : class template 을 arguments에 따라서 customizing 하는 기법 먼저 위 예제의 첫 번째 template 선언처럼 일반적인 template 선언은 primary temp...
-
우리는 함수의 포인터를 사용하여 함수를 또 다른 함수의 인자로 또는 반환 타입으로 사용할 수 있다. 포인터 변수 선언 방법은 어떻게 하는가? 타입 * 변수명; (통상 C++은 type에 *를 붙여쓰고, C개발자는 변수명에 붙여씀) 함수 포인...
댓글 없음:
댓글 쓰기