※ 개인적인 복습 및 공부를 위해 포스팅 하는 글이므로 구체적이지 않을 수 있으며
틀린게 있다면 지적부탁드립니다
▶ 함수포인터 사용법과 단점
# 함수 포인터 사용법 복습
void HelloWorld()
{
cout << "Hello World" << endl;
}
int main()
{
void (*pFunc)(void);
//동작을 넘겨줄 때 유용
pFunc = &HelloWorld;
(*pFunc)();
}
◆ 함수 포인터의 단점?
1) 시그니처가 안맞으면 사용할 수 없다... 예를들어 아래 코드를 보면
void HelloNum(int n)
{
cout << "num" << endl;
}
void (*pFunc)(void);
pfunc = &HelloNum; <-- 안댐
ㆍ 매개변수가 안맞으면 안된다는 것!
2) 상태를 가질 수 없다
class Knight
{
public:
void AddHp(int addHp)
{
_hp += addHp;
}
private:
int _hp = 100;
};
ㆍ 이런 객체가 가지고 있는 상태를 가질 수없다. (맴버변수 등등)
▶ 함수 객체
ㆍ 함수처럼 동작하는 객체
ㆍ 함수 포인터의 단점이 보완이 된다.
[함수처럼 동작]하는 객체.... ()연산자 오버로딩!
ㆍ 사용하려면 () 연산자를 오버로딩해서 사용하면 된다.
class Functor
{
public:
//()연산자 오버로딩
void operator()()
{
cout << "Functor테스트" << endl;
cout << _value << endl;
}
bool operator()(int n)
{
cout << "Functor Test" << endl;
_value += n;
cout << _value << endl;
return true;
}
// 다양한 오버로딩 가능
private:
int _value = 4;
};
Functor functor;
functor();
// 함수포인터와는 다르게 상태값도 들고있을 수 있다!
bool ret = functor(3);
※ 그냥 간단하게 설명하면 () 연산자를 오버로딩해 함수처럼 동작하게 되는 객체를 의미한다.
'C++프로그래밍 > 자료구조,알고리즘(추후확장)' 카테고리의 다른 글
vector의 동작 원리(size / capacity) (0) | 2024.09.28 |
---|---|
콜백함수 (0) | 2024.09.27 |
클래스 템플릿 (0) | 2024.09.27 |
템플릿 기초 (함수템블릿) (0) | 2024.09.27 |
함수포인터 (0) | 2024.09.26 |