함수 포인터의 사용 예
- 프로그래밍/C/C++
- 2018. 9. 10.
함수 포인터의 사용 예
함수포인터를 어떻게 쓰이는 건지 어디에 쓰이는 건지에 대해서 알아보자.
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 == 0) return true; else return false; } bool isOdd(const int &number) // 홀수 { if (number % 2 != 0) return true; else return false; } typedef bool(*check_fcn_t)(const int&); // using check_fcn_t = bool(*)(const int&); void printNumber(const std::array<int, 10> &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<int, 10> 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으로 써도 된다.
함수 포인터를 어떻게 쓰는건지와 왜 쓰이는지 예를 한번 보았다.