// 함수 포인터
// 함수의 타입 : 리턴타입 + 매개변수
// 함수의 선언 : 리턴타입 함수명(매개변수);
#include <iostream>
using namespace std;
// 전역 함수
void function() {
cout << "::function()" << endl;
}
class Clazz {
public:
// 일반 멤버 함수
void member_function() {
cout << "Clazz::member_function()" << endl;
}
// Clazz라는 네임스페이스 안의 제한적인 전역 함수
static void class_function() {
cout << "Clazz::class_function()" << endl;
}
};
int main(void) {
// 함수 포인터 변수의 선언 방법 : 리턴타입(* 변수명)(매개변수);
//void* fp(); => 함수의 선언
void(* fp)();
// 함수의 주소를 얻는 방법 : & 연산자 (주소 변환 연산자)를 사용
printf("0x%p\n", &function);
fp=&function;
// 함수 호출 방법 : 함수 호출 연산자를 사용 => ()
fp();
void(* fp1)()=&function;
void(* fp2)()=&Clazz::class_function;
void(Clazz::* fp3)()=&Clazz::member_function; //멤버함수의 함수 포인터
fp1();
fp2();
Clazz clazz;
//clazz.fp3(); // fp3(&clazz);
(clazz.*fp3)(); // 멤버함수 포인터를 통해 함수 호출
Clazz *p = new Clazz;
(p->*fp3)();
return 0;
}
'Developer > Design Patterns' 카테고리의 다른 글
정적바인딩 / 동적바인딩 (0) | 2014.05.17 |
---|---|
C++ Thread 클래스 구현 (0) | 2014.05.17 |
정적 멤버 함수와 일반 멤버함수 (0) | 2014.05.17 |
thiscall (0) | 2014.05.17 |
Iterator Pattern (0) | 2012.12.07 |