2013/01/10
C++ 함수 포인터
함수 포인터를 알고는 있었지만 실제 응용을 하려다 보니 막히는 사항이 있어 다시 공부를 좀 하고 정리를 하였다.
함수 포인터를 함수를 가리키는 포인터로 아래와 같은 형식으로 선언한다.
반환형 (*함수포인터이름)(매개변수)
포인터 이름은 C++의 경우 객체의 멤버일 경우 객체까지 선언한다
반환형 (클래스::*함수포인터이름)(매개변수)
이렇게 선언된 함수 포인터에 실제 함수의 주소를 할당하여 사용할 수 있다.
이러한 함수 포인터는 일반 포인터 변수와 마찬가지로 비교 연산이 가능하다.
그리고 이 함수 포인터에 할당되어 있는 함수를 호출하는 방법은 C형식의 경우 기존 함수 호출방법과 같지만 C++의 경우 객체 생성 방법에 따라 약간 다르다.
함수 포인터를 특정 함수의 매개변수로 넘기는 방법은 파라메터 입력 부분에 함수 포인터 선언을 해주면 되며 함수내 에서는 포인터 이름으로 해당 함수를 사용할 수있다.
함수 포인터는 또한 특정 함수의 반환 값으로 사용될 수 있다.
아래는 함수 포인터를 반환하는 함수의 선언이다.
이 함수 포인터는 배열이나 STL의 컨테이너에도 응용하여 사용할 수 있다.<
Original Post : http://neodreamer-dev.tistory.com/694
함수 포인터를 함수를 가리키는 포인터로 아래와 같은 형식으로 선언한다.
반환형 (*함수포인터이름)(매개변수)
포인터 이름은 C++의 경우 객체의 멤버일 경우 객체까지 선언한다
반환형 (클래스::*함수포인터이름)(매개변수)
// C
int (*ptFunc)(int, int) = NULL;
typedef int (*ptFuncDef)(int, int);
ptFuncDef ptFunc2;
// C++
int (MyClass::*ptMemberFunc)(int, int);
int (MyClass::*ptMemberConstFunc)(int, int) const;
typedef int (MyClass::*ptMemberFuncDef)(int, int);
ptMemberFuncDef ptMemberFunc2;
이렇게 선언된 함수 포인터에 실제 함수의 주소를 할당하여 사용할 수 있다.
// C
int foo(int a, int b) { return a + b; }
ptFunc = foo;
ptFunc = &foo;
ptFunc2 = &foo;
// C++
class MyClass
{
:
public:
int foo(int a, int b) { return a + b; };
int fooConst(int a, int b) const { return a + b; };
}
ptMemberFunc = &MyClass::foo;
ptMemberFunc2 = &MyClass::foo;
ptMemberConstFunc = &MyClass::fooConst;
이러한 함수 포인터는 일반 포인터 변수와 마찬가지로 비교 연산이 가능하다.
그리고 이 함수 포인터에 할당되어 있는 함수를 호출하는 방법은 C형식의 경우 기존 함수 호출방법과 같지만 C++의 경우 객체 생성 방법에 따라 약간 다르다.
// C
int result;
result = ptFunc(1, 2);
result = (*ptFunc)(1, 2);
// C++
MyClass Class;
result = (Class.*ptMemberFunc)(1, 2);
result = (*this.*ptMemberFunc)(1, 2);
result = (this->*ptMemberFunc)(1, 2);
MyClass pClass = new MyClass;
result = (pClass->*ptMemberFunc)(1, 2);
함수 포인터를 특정 함수의 매개변수로 넘기는 방법은 파라메터 입력 부분에 함수 포인터 선언을 해주면 되며 함수내 에서는 포인터 이름으로 해당 함수를 사용할 수있다.
// 함수 포인터를 첫 번째 매개변수로 받는 함수
void RunFuncPtr( int (*ptFunc)(int, int), int a, int b)
{
int result = (*ptFunc)(a, b);
}
//함수 포인터를 매개변수로 받는 함수의 사용 방법
RunFuncPtr( &foo, 1, 2 );
함수 포인터는 또한 특정 함수의 반환 값으로 사용될 수 있다.
아래는 함수 포인터를 반환하는 함수의 선언이다.
int (*getFuncPtr(int a, int b))(int c, int d)
{
:
return &FuncPtr;
}
typedef int (*ptFuncDef)(int, int);
ptFuncDef getFuncPtr2(int c, int d)
{
:
return &FuncPtr;
}
이 함수 포인터는 배열이나 STL의 컨테이너에도 응용하여 사용할 수 있다.<
Original Post : http://neodreamer-dev.tistory.com/694
Labels:
C++
,
function pointer
,
TistoryOldPost
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment