함수 포인터
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;
함수 포인터는 동작을 넘겨줄 때 유용하다.
하지만 함수 포인터는 시그니처(함수의 모양, 받아주는 매개 값과 출력하는 값 등을 말함)가 맞지 않으면 사용할 수 없다.
거기에 함수 포인터는 상태를 가지지 않는다. 상태라 함은 클래스 내부의 멤버 변수의 값 등을 말한다. 즉 데이터를
가질 수 없다.
'프로그래밍 언어 공부 > C++' 카테고리의 다른 글
템플릿 기초 - 함수 템플릿 (0) | 2022.07.04 |
---|---|
함수 객체 (0) | 2022.07.03 |
디버깅 연습문제 (0) | 2022.07.02 |
객체지향 Text RPG 만들기 (0) | 2022.06.28 |
얕은 복사와 깊은 복사 / 복사 생성자 및 대입 연산자 행동 절차 (0) | 2022.06.24 |