· 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;
}


ID
Password
Join
It's not reality that's important, but how you percieve things.


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.0051 sec