함수 포인터 : 함수의 주소를 가지고 있는 변수
void function(int n); 의 함수 포인터 선언은 반환형과 매개변수형만 알면 된다. (단, 괄호를 추가해줘야 된다.)
void (*ptr)(int); : 반환형이 void이고 매개변수가 int 하나인 함수 포인터
여기서 (*ptr)의 괄호를 빼면 함수의 선언이 돼버린다.
ptr=function; // 주소 값 복사
사용은 function 함수를 사용하는 것처럼 똑같이 사용할 수 있다.
ptr(10); // function(10); 과 동일
참고로 함수의 이름인 function 은 함수의 시작 주소이기 때문에 (*ptr)(10)과 ptr(10)은 같다.
정적 함수 포인터, 멤버 함수 포인터 선언 및 호출 방법
#include <iostream>
using namespace std;
class Test {
public:
static void staticPrint() {
cout << "staticPrint()" << endl;
}
void print() const {
cout << "print()" << endl;
}
};
int main() {
void (*spf)() = Test::staticPrint;
spf();
void (Test::*mpf)() const = &Test::print; // 정적 함수 포인터 선언에서 & 참조자만 추가해주면 된다.
Test test;
(test.*mpf)(); // 객체 test의 멤버함수 print를 의미하는 함수 포인터 변수를 호출 한다.
return 0;
}
멤버 함수의 포인터 선언 및 호출 방식은 왜 저렇게 하는지 궁금하다고 생각이 든다면 본인이 원하는 대로 선언 및 호출 방식을 정의해보면 위와 같은 방식이 나름 적합하다고 납득이 될 것 같다.
'Programming > C++ & STL' 카테고리의 다른 글
함수 어댑터(function adaptor) (0) | 2021.01.16 |
---|---|
바인더(binder) (0) | 2021.01.16 |
객체 포인터의 참조 관계 (0) | 2021.01.15 |
댓글