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 |
---|