본문 바로가기
C++/C++

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

by sihyeong 2022. 11. 27.

함수포인터

  • 함수도 변수처럼 주소를 포인터 변수에 저장하여 접근이 가능하다.
  • 포인터 변수에 함수의 주소를 저장하여 참조하기 위해 사용한다.
int (*varName) (int, int);

typedef int (*funcVarName) (int, int);
funcVarName a;
  • int - 함수의 리턴타입
  • (*varName) - 함수의 주소를 저장할 포인터 변수의 이름    /    (int* a)에서 a와 같은 역할
  • (int, int) - 함수의 매개변수
  • int func(int, int) 형식의 함수의 주소를 저장할 수 있는 varName 포인터변수 생성
  • typedef로 해당 형식을 미리 지정해 놓고 (int a) 하는 것 처럼 (funcName a)로 바로 접근도 가능하다.
int add(int a, int b)
{
   return (a + b);
}

int main(void)
{
   int (*varName)(int, int);

   varName = add;		        // add함수의 주소를 varName 변수에 저장

   cout << varName(1, 2) << endl;	// varName에 저장된 함수 호출  - 출력 : 3
}
  • 포인터변수에 함수의 주소를 저장한 다음
  • 함수를 호출하는 것 처럼 매개변수를 주고 호출하면 된다.

 

멤버 함수 포인터

class CPlayer
{
    void Outout() {};
}

typedef void(CPlayer::*pFunc)(void);
pFunc = &CPlayer::Output;

CPlayer Player1;
(Player1.*pFunc)();
  • void(CPlayer::*pFunc)(void) 
  • void - 멤버 함수 포인터 리턴 타입
  • CPlayer:: - 어떠한 클래스의 멤버 함수를 호출할 것인지 알려주기 위함이다.
  • *pFunc - 는 멤버 함수 포인터 이름
  • (void) - 멤버 함수 포인터 매개변수 타입
  • pFunc는 CPlayer의 멤버 함수만 호출이 가능하다.
  • 클래스의 멤버 함수를 호출하기 위해선 클래스 객체가 필요하다.
  • CPlayer a;  a.Outout() 처럼, Outout이 전역함수가 아니기 때문에 객체가 꼭 필요하다.
  • player1.Output() != player1.&Output()  따라서 pFunc는 함수의 주소를 저장하고 있기 때문에 player1.*Outout()처럼 호출한다.

'C++ > C++' 카테고리의 다른 글

[C++] find, find_if 차이점  (0) 2022.12.07
[C++] 멤버함수포인터 소멸자 런타임 에러  (0) 2022.12.01
[C++] multiset  (1) 2022.11.24
[C++] 비트 연산, 비트맵마스크  (1) 2022.11.20
[C++] 벡터 중복 제거  (0) 2022.11.19