함수 포인터의 사용 예



함수 포인터의 사용 예


함수포인터를 어떻게 쓰이는 건지 어디에 쓰이는 건지에 대해서 알아보자.


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
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <array>
using namespace std;
 
bool isEven(const int &number) // 짝수
{
    if (number % 2 == 0return true;
    else return false;
}
 
bool isOdd(const int &number) // 홀수
{
 
    if (number % 2 != 0return true;
    else return false;
}
 
typedef bool(*check_fcn_t)(const int&);
// using check_fcn_t = bool(*)(const int&);
 
void printNumber(const std::array<int10> &my_array, check_fcn_t check_fun = isEven)
{
    for (auto element : my_array)
    {
        if (check_fun(element) == true)
            cout << element;
    }
    cout << endl;
}
 
int main()
{
    std::array<int10> my_array = { 0,1,2,3,4,5,6,7,8,9 };
 
    printNumber(my_array);
    printNumber(my_array, isOdd);
 
    return 0;
}
cs

우선 33행에서 array 배열을 int형으로 10개를 만들어줬다.
21행 함수 매개변수를 보면 array 배열을 래퍼런스로 가져오고 18행에서 typedef로 재정의 되어있는것을 보면 bool형으로 check_fcn_t 함수포인터를 재정의 했다.
재정의를 안하고 그냥 쓸려면은 bool(*check_fcn_t)(const int &check_fun)을 사용하면 된다.
그리고 check_fcn_t형으로 된 check_fun이름을 정의 해줬고 디폴트 매개변수로 isEven 함수를 넣어줬다.

35행에서 printNumber() 함수를 실행시키면 배열이 인자값으로 넘어가고
25행에서 만약 check_fun 함수를 element 인자값을 넘기고 함수에서 홀수인지 짝수인지 계산을 하고 리턴값이 true면 출력을 해준다.
18행19행처럼 using으로 써도 된다.

함수 포인터를 어떻게 쓰는건지와 왜 쓰이는지 예를 한번 보았다.




댓글

Designed by JB FACTORY