함수포인터
- 함수도 변수처럼 주소를 포인터 변수에 저장하여 접근이 가능하다.
- 포인터 변수에 함수의 주소를 저장하여 참조하기 위해 사용한다.
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 |