Automotive Software

함수 포인터 (Function Pointer) 본문

프로그래밍 (Programming)/C++ (C Plus Plus) 기초

함수 포인터 (Function Pointer)

AutoSW 2021. 1. 13. 00:18
  • 함수명은 배열명과 같이 해당 개체(함수 또는 배열)의 주소를 가리키는 상수형 포인터
    • 함수 호출은 포인터가 가리키는 개체(함수)를 주어진 매개변수와 함께 실행하는 것
  • 함수를 가리키는 포인터
    • 가리키고자 하는 함수의 반환형과 원형부(매개변수형)가 동일한 포인터 변수
      • 동일한 반환형을 가지며
      • 동일한 매개변수형을 가진 함수만을 포인팅
    • 함수 호출시 함수명 대신 포인터가 사용
    • 멤버 함수에 대한 포인터
      • 클래스 이름과 범위 연산자(:::)를 함수명 앞에 명시
class cMyClass
{
public:
	void memFunc();
};

bool myFunc1(int data);
bool myFunc2(int data);
bool myFunc3(int data);

int main()
{
	int selected;
	bool (* pFunc) (int); // pFunc는 bool형의 반환형과 int형의 매개변수를 가지는 함수만을 포인팅
	void (cMyClass::*pMemFunc)(); // pMemFunc는 cMyClass의 멤버함수를 가리키는 함수포인터
	...
	pFunc = myFunc1;
	...
	// 함수 호출방식은 동일함
	myfunc1(1);
	pFunc(1);
    
	// 유연성
	cin >> selected;
	switch(selected)
	{
          case 1:
          {
            pFunc = myFunc1;
            break;
          }
          case 2:
          {
            pFunc = myFunc2;
            break;
          }
          case 3:
          {
            pFunc = myFunc3;
            break;
          }
          default:
          {
            pFunc = myFunc1;
          }
	}
	// 단일화된 함수 호출
	pFunc(1);
}

 

  • 함수 포인터의 다른 함수로의 전달
void myFunc( int & rP1, int & rP2 );

void callMyFunc( void (*pFunc)(int &, int &), int & rIn1, int & rIn2)
{
	pFunc(rIn1, rIn2);
}

 

  • typedef를 이용한 함수 포인터 간략화
// typedef를 이용한 새로운 포인터형 선언
typdef void (*MFP) (int &, int &); // 예, MFP(My function pointer)
void myFunc( int & rP1, int & rP2 );
void callMyFunc( MFP, int & rIn1, int & rIn2);

void callMyFunc( MFP pFunc, int & rIn1, int & rIn2)
{
	pFunc(rIn1, rIn2);
}

 

'프로그래밍 (Programming) > C++ (C Plus Plus) 기초' 카테고리의 다른 글

정적 멤버 변수 및 함수 (Static Member and Function)  (0) 2021.01.11
다형성 (Polymorphism)  (0) 2021.01.07
상속 (Inheritance)  (0) 2021.01.02
연산자 중첩  (0) 2020.12.29
객체 초기화  (0) 2020.12.29