BLOG main image
전체 (276)
[Computer] (42)
[Programming] (62)
[DBMS] (26)
[Operating System] (21)
[Study English] (8)
[For money] (28)
[Interest] (89)
«   2009/11   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
77888 Visitors up to today!
Today 80 hit, Yesterday 46 hit
'포인터'에 해당되는 글 1건
[폭주기관차, 2007/12/05 13:22, [Programming]/Visual C++ API/MFC]
한가지 이름의 함수에 여러가지 동작을 수행하게 할 수 있다.

아래와 같은 클래스가 있다고 보자

class class_A {
public:
    int (*test)(int a)
};


A라는 클래스안에 test란 포인터형 함수가 있다.

지금까지 선언하던 함수랑은 살짝 다르다...

다음과 같은 경우를 보자.

int *test(int a);


이 함수의 세부 사항을 보면

함수이름 : test
매개변수 : int a
반환형식 : int *


이런 뜻이 된다. 그렇다면 아까와 같이 괄호를 치면 어떤 의미가 될 것인가.

int (*test)(int a);

함수이름 : *test
매개변수 : int a
반환형식 : int

그렇다 함수앞에 *(포인트)가 붙은 것이다.

그렇다면 이런 것을 어떻게 사용할까?

아래의 예제를 보자.


int print_a( int a );
{
    printf("a = %d\r\n", a);
   
    return 0;
}

int print_b( int b );
{
    printf("b = %d\r\n", b);
   
    return 0;
}

int (*test)(int a);

int main(void)
{
    test = &print_a;                // 포인터형 test함수에 print_a함수의 주소를 넣었다.
   
    test(1);                          // 포인터형 test함수를 호출했다.
                                        // test 함수는 print_a의 함수 주소를 가지고 있으므로
                                        // print_a함수를 수행한다.

    test = &print_b;

    test(2);

    return 0;
}


출력결과는
a = 1
b = 2


어디에서 응용이 가능한가...?

클래스를 만들때 어떤 동작은 다른 개발자에게 넘겨주고 싶을 때가 있다.
이런 경우는 파생클래스를 만들어서 오버라이딩을 할 수도 있지만
함수 하나만 다른 개발자가 원하는 코드로 사용하게 하고 싶을 경우가 있다.


설명하기 힘드므로 아래와 같은 예를 보자

void 휴식( int)


이런 함수가 있다.

휴식은 클래스를 만들때 정하지 않고 다른 프로그래머가 내 클래스 코드를 사용할때
따로 지정하여 사용하게 하고 싶다면 아래와 같이 선언을 한다.

class 일상{
public:
    void (*휴식)(int);
};


이렇게 클래스를 선언해두면 다른 개발자가 '일상'이라는 클래스를 사용할때 굳이 파생클래스를 이용하지
않더라도 사용할 수가 있다.

void 내휴식(int)
{
    자동차구매();
}

void main(void)
{
    일상 = 폭주기관차;
   
    폭주기관차.휴식 = &내휴식;
   
    폭주기관차.휴식(200);   
}

Trackback Address :: http://kongmks.cafe24.com/trackback/269
Name
Password
Homepage
Secret
*1