오븐 노트

[C++] 함수 포인터 #1 본문

Develop/C++

[C++] 함수 포인터 #1

오 븐 2023. 4. 28. 21:36
#include <iostream>
using namespace std;

int Add(int a, int b)
{
    return a + b;
}

int Sub(int a, int b)
{
    return a - b;
}

class Item
{
public:
    Item() : _itemId(0), _rarity(0), _ownerId(0)
    {

    }

public:
    int _itemId; // 아이템 구분을 위한 ID
    int _rarity; // 희귀도
    int _ownerId; // 소지자 ID
};

typedef bool(ITEM_SELECTOR)(Item*, int);

Item* FindItem(Item items[], int itemCount, ITEM_SELECTOR* selector, int value)
{
    for (int i = 0; i < itemCount; i++)
    {
        Item* item = &items[i];
        if (selector(item, value))
            return item;
    }

    return nullptr;
}

bool IsRareItem(Item* item, int value)
{
    return item->_rarity >= value;
}

bool IsOwnerItem(Item* item, int ownerId)
{
    return item->_ownerId == ownerId;
}

int main()
{
    int a = 10;

    typedef int DATA;

    DATA* pointer = &a;

    // 함수
    typedef int(FUNC_TYPE)(int, int);
    //using FUNC_TYPE = int(int a, int b); // 윗줄과 같은 내용이지만 추후 다룸
    
    FUNC_TYPE* fn;

    // 함수 포인터
    fn = Add;

    int result = fn(1, 2); // 기본 문법
    cout << result << endl;
    
    int result2 = (*fn)(1, 2); // 함수 포인터는 *(접근 연산자)를 붙여도 함수 주소를 가리킴
    cout << result2 << endl; // 동작 방식이 기본 문법과 완전히 동일. 택1

    Item items[10] = {};
    items[3]._rarity = 2; // RARE
    FindItem(items, 10, IsRareItem, 2);
    FindItem(items, 10, IsOwnerItem, 100);

    return 0;
}

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
 
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.

 

모든 글은 제가 공부하기 위해 작성합니다.

'Develop > C++' 카테고리의 다른 글

[C++] 함수 객체  (0) 2023.05.01
[C++] 함수 포인터 #2  (0) 2023.05.01
[C++] 전방선언  (0) 2023.03.08
[C++] TextRPG (OOP) #1~3  (0) 2023.03.03
[C++] 캐스팅 4총사  (0) 2023.03.03