// 함수 포인터

// 함수의 타입 : 리턴타입 + 매개변수

// 함수의 선언 : 리턴타입 함수명(매개변수);

#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
Posted by No names
,