본문 바로가기

예전/C, C++

[C++] 일반 함수 포인터, 멤버 함수 포인터



위의 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