위의 main에서 1은 가능하지만, 2는 불가능하다.
즉,
1. 일반 함수 포인터에 멤버 함수 주소를 담을 수 없다.
2. 하지만, 일반 함수 포인터에 정적 멤버 함수의 주소는 담을 수 있다. (static은 this 없이도 부를 수 있으니까)
2는 위의 2-0 처럼 멤버 함수의 주소를 담는 포인터를 만들면 가능하다.
하지만, 사용하려면 어떻게 해야할까?
정답은 2-3 이다.
그럼 이제 왜 나머지가 안되는 이유를 살펴보자.
Close는 멤버 함수이다. 2-1 처럼 쓰면, this가 없기 때문에 저렇게 쓸 수 없다.
2-2 는 dlg.Close() 라는 함수를 부르는 것이다.
하지만, Dialog 라는 class에 f3() 이라는 멤버 함수는 없다. 때문에 역시 오류이다.
결국, *를 붙여 역참조하는 2-3 번이 맞는 것이다.
* 연산자는 () 보다 우선순위가 낮기 때문에 ()를 붙여준다.
'예전 > C, C++' 카테고리의 다른 글
[C++] binding (0) | 2014.01.28 |
---|---|
[C++] upcasting (0) | 2014.01.28 |
[C++] static 멤버 변수, 함수 (0) | 2014.01.28 |
[C] memmove와 memcopy (0) | 2013.08.24 |
[C++] reinterpret_cast (0) | 2013.08.23 |