10.22(월) - operator, 함수포인터, OnDraw

2007/10/22 14:34

1. Operator - [], (), 변환연산자 (int*)
[ more.. | less.. ]
class Test
{
private:
    int array[10];

public:
    int& operator [] ( int i)
    {
        return array[i];
    }
    void operator () () const
    {
        Print();
    }

    Test( void )
    {
        for ( int i = 0; i < 10; ++i )
            array[i] = i;
    }

    void Print( void ) const
    {
        for ( int i = 0; i < 10; ++i )
            printf( "%d ", array[i] );
        printf( "\n" );
    }

    operator int*()
    {
        return array;
    }
};

void Print( const Test& t )
{
    t();
}

void Print( int* array, int size )
{
    for( int i = 0; i < size; ++i )
        printf( "%d ", array[i] );

    printf( "\n" );
}

void main( void )
{
    Test test;

    //Print( test );

    Print( test, 10 );
   
    printf( "\n" );
}

2. 함수포인터 활용 - 멤버함수포인터 써보기

  1) 함수포인터 기본.
[ more.. | less.. ]
typedef void(*FUNC)( int );

void Print( int n );
void Listen( int n );

void main( void )
{
    void (* FuncPointer[2] )( int ) = { Print, Listen };

    FUNC func = Print;

    FUNC FuncArray[2] = { Print, Listen };   
}

void Print( int n )
{
    printf( "Print - %d\n", n );
}

void Listen( int n )
{
    printf( "Listen - %d\n", n );
}

  2) 클래스의 멤버 함수를 포인터함수로 써보기.
[ more.. | less.. ]
class Test;

typedef void ( Test::*func )(int);

class Test
{
public:

    void (Test::*FUNC)( int );

    void Print( int n )
    {
        printf( "Print - %d\n", n );
    }
    void Proxy( int a )
    {
        (this->*FUNC)(a);
    }
};

void GlobalPrint( int n )
{
    printf( "Global %d", n );
}

void main( void )
{
    // &를 받은 함수는 *를 호출해야 한다.
    // void (* func)(int) = &GlobalPrint;
    // (*func)( 99 );
   
    Test test;
    func fun = { &Test::Print };
    (test.*fun)(6);

    // 멤버내의 함수포인터를 호출하는 법
    Test t = { &Test::Print };
    ( t.*(t.FUNC) )(99);
    //t.Proxy( 99 );
}

Tags

MFC