1. Operator - [], (), 변환연산자 (int*)
 more.. 
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.. 
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.. 
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 );
}
 
					
					
						
						
							
Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다