프로그래밍 공부
카테고리
작성일
2023. 11. 10. 15:51
작성자
WDmil
728x90

함수포인터

함수또한 포인터 처럼 사용할 수 있는데, 이는 함수 자체에 주소값이 존재하고. 어떠한 함수를 호출할 때. 그 함수의 주소값을 가져와서 사용하기 때문이다.

 

#include <iostream>
#include <functional>

using namespace std;

// 전방선언
// 함수는 메모리를 가진다.
void Attack();
void Damage();

class Player
{
public:
    static void Attack()
    {
        cout << "Player Attack" << endl;
    }

    void Damage()
    {
        cout << "Player Damage" << endl;
    }
};
class Monster
{
public:
    void Attack()
    {
        cout << "Monster Attack" << endl;
    }
};
int main()
{
    // 반환형(* 변수이름)( 매개변수)
    void (*action)();

    {
        // 일반적으로 함수포인터를 사용하는 방식. 전역변수 선언형
        action = Attack;
        action();

        action = Damage;
        action();

        // 객체 안에 존재하지만 전역형 함수일경우.
        action = Player::Attack;
        action();
    }

    {
        // 객체 자체에 존재하는 함수를 사용하기 위해 사용하는 방법.
        void(Player:: * playerAction)();

        Player player;
        playerAction = &Player::Damage;

        (player.*playerAction)();

        // 위 방법을 #include <functional> 을 사용해서 더 쉽게 쓰는방식.
        function<void()> ObjectAction = bind(&Player::Damage, player);
        ObjectAction();
        Monster monster;
        ObjectAction = bind(&Monster::Attack, monster);
        ObjectAction();
    }


}

void Attack()
{
    cout << "Attack" << endl;
}

void Damage()
{
    cout << "Damage" << endl;
}

 

함수포인터는 위와같이 작동할 수 있다.

728x90

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

(STL)Vector  (0) 2023.10.17