함수포인터Function Pointers
함수도 포인터다.
즉, 함수도 메모리 주소를 가지고 있다.
함수를 실행하면 함수의 메모리주소를 찾아 실행한다.
int (*포인터명)(파라미터) = 함수명; 형식으로 생성할 수 있다.
함수포인터를 파라미터로 넣을 수 있다.
반복되는 로직이 있으면 포인터를 통해 다 분리해서 사용하는게 가능하다.
함수파라미터도 기본값이 설정가능하다.
함수는 이름 자체가 포인터라 &를 안넣어도 된다.
함수가 파라미터로 자주사용되면 계속쓰기 귀찮으면 typedef로 선언해서 사용할 수 있다.
#include <functional>을 사용해 더 간단히 사용할 수 있다.
#include <iostream>
#include <array>
#include <functional>
using namespace std;
int func() {
return 5;
}
void printNumbers(const array<int, 10>& myArr,bool print_even) {
for (int a : myArr)
{
if (print_even && a % 2 == 0) {
cout << a << " ";
}
else if (!print_even && a % 2 == 1) {
cout << a << " ";
}
}
cout << endl;
}
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;
}
void printNumbersFunP(const array<int, 10>& myArr, bool (*check_fcn)(const int&)) {
for (int a : myArr)
{
if (check_fcn(a)==true) {
cout << a << " ";
}
}
cout << endl;
}
void printNumbersFun(const array<int, 10>& myArr, function<bool(const int&)> funct) {
for (int a : myArr)
{
if (funct(a) == true) {
cout << a << " ";
}
}
cout << endl;
}
int main()
{
//함수의 주소가 출력된다.
cout << func << endl;
//함수포인터 설정하기
int (*funcPtr)() = func;
//func()함수와 메모리 주소도 같고 같이 사용한다.
cout << funcPtr << " " << funcPtr() << " " << &funcPtr << endl;
//함수포인터 사용하기전 홀수 짝수 출력 함수
std::array<int, 10> myArr{ 1,2,3,4,5,6,7,8,9,10 };
printNumbers(myArr, true);
printNumbers(myArr, false);
//함수포인터 파라미터로 사용하기(함수명)
printNumbersFunP(myArr, isEven);
printNumbersFunP(myArr, isOdd);
std::function<bool(const int&)> funct = isEven;
//fuction사용해서 함수포인터 파라미터로 이용하기(포인터명)
printNumbersFun(myArr, funct);
funct = isOdd;
printNumbersFun(myArr, funct);
return 0;
}
'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글
c++ vector (size,capacity,reserve) vector를 stack처럼 사용하기 (0) | 2019.07.31 |
---|---|
c++ 스택Stack 힙Heap (0) | 2019.07.31 |
c++ 함수 오버로딩 (0) | 2019.07.31 |
c++ inline 함수 (0) | 2019.07.31 |
c++ 반환값(값,참조,주소,구조체,튜플) (0) | 2019.07.31 |