멤버 함수 호출
멤버 함수 호출은 포인터 선언에 어떤 클래스의 멤버 함수를 가리킬건지 클래스이름을 지정해줘야 합니다.
Ex) 시그니처가 void Point::Print(int n)인 멤버 함수 포인터 선언
void(Point::*pf)(int) 로 pf 멤버 포인터 선언
- * 객체로 멤버 함수 호출 시에는 .* 연산자를 이용한다. 예를 들어 (객체.*pf)(10) 처럼 사용
- * 주소로 멤버 함수 호출 시에는 -> * 연산자를 이용한다. 예를 들어 (주소->*pf)(10) 처럼 사용
코드
#include <iostream>
using namespace std;
class Point {
int x;
int y;
public:
explicit Point(int _x = 0, int _y = 0) : x(_x), y(_y) {}
void Print() const { cout << x << ',' << y << endl; }
void PrintInt(int n) { cout << "테스트 정수: " << n << endl; }
};
int main() {
Point pt(2, 3);
Point* p = &pt;
void (Point:: * pf1)() const; //멤버 함수 포인터 선언
//void- > 반환 타입이 X
//Point:: *pf1 -> pf1은 Point클래스 내의 멤버함수 포인터(멤버 함수의 주소를 가리키는 변수)
//() - > 매개변수를 받지 않음.
pf1 = &Point::Print;
void (Point:: * pf2)(int); //멤버 함수 포인터 선언
//void- > 반환 타입이 X
//Point:: *pf1 -> pf1은 Point클래스 내의 멤버함수 포인터(멤버 함수의 주소를 가리키는 변수)
//(int) - > int형 매개변수를 받음.
pf2 = &Point::PrintInt;
pt.Print(); //단순 객체 멤버함수 호출
pt.PrintInt(10); //pt의 객체 멤버함수 호출
cout << endl;
(pt.*pf1)(); //객체로 멤버 함수 포인터를 이용한 호출
(pt.*pf2)(10); //객체로 멤버 함수 포인터를 이용한 호출
cout << endl;
(p->*pf1)(); //주소로 멤버 함수 포인터를 이용한 호출
(p->*pf2)(10); //주소로 멤버 함수 포인터를 이용한 호출
return 0;
}
pt: Point 클래스
*p: pt의 주소를 갖는 포인터 변수
pf1: Point 클래스의 Print함수 사용을 위해 반환이 void이고 Point형으로 명시한, 매개변수가 없는 함수 포인터
pf2: Point클래스의 PrintInt함수 사용을 위해 반환이 void이지만 매개변수를 Int로 받는 함수 포인터
객체로 멤버 함수를 호출하기 위해
1. .*를 활용한 (pt.*pf1)()로 Print 함수호출
2. .*를 활용한 (pt.*pf2)(10)로 Int형을 매개변수로 받는 PrintInt 함수 호출
주소로 멤버 함수 호출하기 위해
1. ->*를 활용한 (p->pf1)() 로 Print 함수 호출
2. ->*를 활용한 (p->pf2)(int)로 PrintInt 함수 호출
결과
'C++ > STL' 카테고리의 다른 글
[STL] 함수 객체 (0) | 2025.02.20 |
---|---|
[STL] 함수 포인터 - 콜백 함수 (0) | 2025.02.15 |
[STL]함수 포인터 - 정적 함수 호출 (0) | 2025.02.15 |
[STL] 함수 포인터의 종류 (0) | 2025.02.15 |
[STL] 함수 포인터 선언과 사용 (0) | 2025.02.15 |