본문 바로가기
Programming/C++ & STL

정적 함수, 멤버 함수 포인터

by 한 땀; 한 땀; 2021. 1. 20.

함수 포인터 : 함수의 주소를 가지고 있는 변수

 

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

댓글