· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Function Pointer In Class

C++ 클래스에서 함수 포인터 사용하기

  • 제약조건
    1. 클래스 멤버인 함수 포인터에 해당 클래스의 멤버함수의 주소를 할당하는 것은 가능하지만 호출은 불가능.
    2. 클래스 외부에서 해당 클래스에 대한 함수 포인터를 선언하고, 클래스 멤버함수의 주소를 할당 및 호출 가능.
    3. 클래스 멤버 변수인 함수 포인터에 static 멤버함수의 주소를 할당 및 호출 가능.

1.1. 제약조건1

예
class A { public: // 클래스 A에 대한 펑션 포인터 void (A::*FuncPtr)(void); void Func1(void) { cout<<"Func1"<<endl; } void Func2(void) { cout<<"Func2"<<endl; } void SetFuncPointer(int num) { if ( num == 1 ) this->FuncPtr = this->Func1; else this->FuncPtr = this->Func2; } void RunFuncPointer() { this->FuncPtr(); // <--- 컴파일 에러 발생 } };

1.2. 제약조건2

예
class A { public: void Func1(void) { cout<<"Func1"<<endl; } void Func2(void) { cout<<"Func2"<<endl; } }; int main() { A obj; // 클래스 A에 대한 펑션 포인터 변수 정의 void (A::*pf)(void); pf = obj.Func1; (obj.*pf)(); pf = obj.Func2; (obj.*pf)(); return 0; }

1.3. 제약조건3

예
class A { private: void (*FuncPtr)(void); public: static void Func1(void) { cout<<"Func1"<<endl; } static void Func2(void) { cout<<"Func2"<<endl; } void SetFuncPointer(int num) { if ( num == 1 ) this->FuncPtr = this->Func1; else this->FuncPtr = this->Func2; } void RunFuncPointer() { this->FuncPtr(); } }; int main() { A obj; int num; cout<<"select function(1, 2) : "; cin>>num; obj.SetFuncPointer(num); obj.RunFuncPointer(); return 0; }




sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2006-06-11 20:30:38
Processing time 0.0506 sec