This 4

1_this3_멤버 변수의 포인터

멤버 변수의 포인터class Dialog { public: int color; void Close() {} }; int main() { // 멤버 변수의 포인터 만들기. int Dialog::*p = &Dialog::color; printf("%d\n", p); // 0 Dialog dlg; dlg.*p = 10; // dlg.color = 10 으로 컴파일. } 멤버 변수의 포인터의 경우 멤버 함수의 포인터와 마찬가지로 Dialog::(객체명::)을 붙여주면 된다. 접근하는 방법 역시 역참조를 이용, dlg.*p와 같이 접근하면 된다.(객체를 생성해야 접근 가능) 이 때 멤버변수 포인터 p를 출력하면 0임을 확인할 수 있다.Dialog 클래스에 int a를 추가하고 p를 다시 한번 출력해 보자. cla..

개발/C, C++ 2014.07.20

1_this2_함수포인터의 this

함수포인터에서 this1. 일반 함수포인터에 멤버함수의 주소를 담을 수는 없다.2. 일반 함수포인터에 static 멤버함수의 주소를 담을 수는 있다. 다음의 예제에서.. class Dialog { public: void Close() {} static void Close2() {} }; void foo() {} int main() { void(*f1)() = &foo; //함수포인터 f1 f1(); (*f1)(); void(*f2)() = &Dialog::Close; // error void(*f3)() = &Dialog::Close2; // ok.. this가 없다. } 함수포인터 f1()는 인수가 없는 void 함수를 담는 함수포인터이다. 위의 그림만 봤을 때 f2(), f3() 역시 일치하는 Clo..

개발/C, C++ 2014.07.20

1_ this1

this : 멤버함수를 호출한 객체의 주소를 나타낸다. 1. 일반멤버함수는 첫번째 인자로 this가 추가된다.2. static 멤버함수는 this가 추가되지 않는다. 다음의 Point 클래스에서 class Point { int x, y; public: void set(int a, int b) { x = a; // this->x = a; y = b; // this->y = b; } static void foo(int a) { x = a; } };함수 void set(int a, int b)의 경우 void set(Point* const this, int a, int b)로 컴파일된다. 자신의 객체를 의미하는 this가 추가되고 컴파일된다. 이는 동일한 클래스의 객체가 여러개 생성된다 해도 멤버함수는 하나만..

개발/C, C++ 2014.07.20
반응형