함수 포인터

 

typedef int aaa; // 자료형 재정의 aaa를 int와 같이 사용하겠다는 뜻

// aaa fn1 = 0;

 

typedef int* bbb; // 주소 바구니 자료형 재정의

// bbb fn2 = &fn1;

 

typedef int ccc[20];

// ccc fn3

// int가 20개 존재하는 배열의 명칭을 fn3로 선언

 

typedef int(*A)(int, int); // 일반 함수 포인터

// 두 개의 int 매개 값을 받아서 하나의 int 값을 출력하는 함수 포인터

// A fn4;

// fn4(1, 2); 이런 식으로 사용 가능


class X

{

public:

 // 멤버 함수

int Get(int a, int b)

{

}

 

public:

 // 멤버 변수

}

 

typedef int(X::*MA)(int, int); // 멤버 함수 포인터

// MA fn5;

// fn5 = &X::Get;

// X x1;

// (x1.*fn5)(1, 2);

 

// X* x2 = new X();

// (x2->*fn5)(1, 2);

// delete x2;

 

typedef을 사용하지 않고 한 번에 선언이 가능하다.

 

int (X::*ma)(int, int);

// ma = &X::Get;

// X* x3 = new X();

// (x3->*ma)(1, 2);

// delete x3;

 

함수 포인터는 동작을 넘겨줄 때 유용하다.

하지만 함수 포인터는 시그니처(함수의 모양, 받아주는 매개 값과 출력하는 값 등을 말함)가 맞지 않으면 사용할 수 없다.

거기에 함수 포인터는 상태를 가지지 않는다. 상태라 함은 클래스 내부의 멤버 변수의 값 등을 말한다. 즉 데이터를 

가질 수 없다. 

 

+ Recent posts