반응형
클래스 멤버 함수 포인터는 다음과 같이 사용한다.
#include <iostream>
class Calculator
{
public:
int Add(int a, int b)
{
return a + b;
}
};
int main()
{
Calculator cal;
//일반 클래스 함수 사용
int result = cal.Add(1,2);
std::cout << "일반 클래스 함수 사용 cal.Add(1,2) : " << result << std::endl;
//클래스 함수 포인터 pAdd 선언
int (Calculator::*pAdd)(int, int);
pAdd = &(Calculator::Add); //클래스 함수인 경우에는 주소인지 알 수 있도록 &가 추가되어야 한다.
result = (cal.*pAdd)(1, 2); //클래스 함수이기 때문에 실제 객체(cal)에서 호출해줘야 한다.
//함수포인터인지 알 수 있도록 *를 붙여서 사용한다.
std::cout << "클래스 함수 포인터 사용 (cal.*pAdd)(1, 2) : " << result << std::endl;
//동적 할당 시 사용법
Calculator* pCal = new Calculator();
result = ((*pCal).*pAdd)(1,2);
std::cout << "클래스 포인터 사용 ((*pCal).*pAdd)(1,2) : " << result << std::endl;
result = (pCal->*pAdd)(1, 2); // *객체. == 객체->
std::cout << "클래스 포인터 사용 ((*pCal).*pAdd)(1,2) : " << result << std::endl;
delete pCal;
///typedef 사용
typedef int (Calculator::*CALSS_FUNC_TYPE)(int, int);
CALSS_FUNC_TYPE pAdd2;
pAdd2 = &(Calculator::Add);
result = (cal.*pAdd2)(1, 2);
std::cout << "클래스 함수 포인터(typedef) 사용 (cal.*pAdd)(1, 2) : " << result << std::endl;
//using 사용
using CALSS_FUNC_TYPE2 = int (Calculator::*)(int, int);
CALSS_FUNC_TYPE2 pAdd3;
pAdd3 = &(Calculator::Add);
result = (cal.*pAdd3)(1, 2);
std::cout << "클래스 함수 포인터(using) 사용 (cal.*pAdd)(1, 2) : " << result << std::endl;
return 0;
}
'C++' 카테고리의 다른 글
std::variant (0) | 2023.04.06 |
---|---|
함수 포인터 (0) | 2023.02.14 |