함수포인터
함수의 주소를 저장하는 포인터
우리가 항상 사용해 왔던 함수도 사실 주소값이 해당 함수의 내용을 가르키고있는것이다.
즉 함수의 이름은 포인터이다.
| 1 2 3 4 5 |  | void Function() { } void main() {     cout << Function << endl; } | cs | 
해당 코드를 실행시키면 Function의 주소값이 출력이됩니다. 즉 해당 함수의 주소값을 포인터의 저장시켜
사용하는게 함수 포인터입니다.
함수포인터의 형태
반환타입(클래스명* 변수명) (매개변수);
클래스 명의 경우 해당 함수가 들어있는 클래스 이름을 넣어주면 된다.
| 1 2 3 4 5 6 7 8 9 10 11 12 |  | int Add(int num1, int num2) {     return num1 + num2; } void main() {     int num1 = 10;     int num2 = 20;     int(*ptr)(int, int) = Add;     cout << ptr(10, 20) << endl; } | cs | 
10행 : 반환값이 int이고 매개변수로 int값2개를 받는 함수의주소를 받을수있는 포인터를 만들었다
11행 : 함수호출자처럼 똑같이 사용하여 함수포인터의 정의되어있는 함수를 호출
함수포인터 배열의 형태
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |  | int Add(int num1, int num2) {     return num1 + num2; } int Min(int num1, int num2) {     return num1 - num2; } void main() {     int num1 = 10;     int num2 = 20;     int(*ptr[2])(int, int) = { Add , Min};     cout << ptr[0](10, 20) << endl;     cout << ptr[1](10, 20) << endl; } | cs | 
14행 : 함수포인터의 배열선언 2개의 배열선언 이후 인자값으로 Add와 Min을 넣어주었다.
15~16행 : 사용법은 기존과동일하고 배열과 동일하다
함수포인터는 무조건 반환값과 매개변수의 갯수가 동일해야만 사용 가능하기때문에 둘중 하나라도 다를경우
함수포인터의 해당 함수의 주소를 넘길수없다.
함수포인터 이쁘게 만들기
typedef을 이용하기
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |  | typedef int(*ptr)(int, int); int Add(int num1, int num2) {     return num1 + num2; } int Min(int num1, int num2) {     return num1 - num2; } void main() {     int num1 = 10;     int num2 = 20;     ptr Fptr[2] = { Add , Min};     cout << Fptr[0](num1, num2) << endl;     cout << Fptr[1](num1, num2) << endl; } | cs | 
1행 : typedef을 이용하여 포인터 함수를정의하여 ptr이라는 변수명 생성
16행 : int(*변수명)(int,int)대신 ptr로 간단하게 정의
using을 이용하기
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |  | using ptr =  int(*)(int, int); int Add(int num1, int num2) {     return num1 + num2; } int Min(int num1, int num2) {     return num1 - num2; } void main() {     int num1 = 10;     int num2 = 20;     ptr Fptr[2] = { Add , Min};     cout << Fptr[0](num1, num2) << endl;     cout << Fptr[1](num1, num2) << endl; } | cs | 
1행 : using으로 정의
function을 이용하기
C++11에서는 표준 라이버르 <function> 헤더에 정의되어 있는 std::function을 이용해서 함수 포인터를 정의할수있다.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |  | #include <iostream> #include <functional> using namespace std; int Add(int num1, int num2) {     return num1 + num2; } int Min(int num1, int num2) {     return num1 - num2; } void main() {     int num1 = 10;     int num2 = 20;     function<int(int, int)> ptr[2] = { Add,Min };     cout << ptr[0](num1, num2) <<endl;     cout << ptr[1](num1, num2) << endl; } | cs | 
2행 : function을 사용하기 위해서 전처리기 정의
18행 : function을 이용하여 함수포인터배열생성
'C++' 카테고리의 다른 글
| C++ 조건부 컴파일 (0) | 2020.09.07 | 
|---|---|
| C++ 매크로,매크로 함수 (0) | 2020.09.07 | 
| C++ 연산자 오버로딩 주의사항 (0) | 2020.09.06 | 
| C++ 연산자 오버로딩(Operator Overloading) (0) | 2020.09.06 | 
| C 파일입출력 (0) | 2020.09.04 |