CSocCom* GetAcceptSocCom();
: *이 붙는 것은 포인터를 나타냄. CSocCom 클래스의 포인터를 반환하는 함수를 선언한 것.
함수 GetAcceptSocCom()은 호출될 때 CSocCom 클래스의 인스턴스를 가리키는 포인터를 반환한다. 이렇게 반환된 포인터를 사용하여 클래스의 멤버 변수와 함수에 접근할 수 있다.
포인터는 해당 클래스의 인스턴스나 객체를 직접 저장하는 것이 아니라, 그 객체가 저장된 메모리 위치를 가리키는 역할을 한다. 이를 통해 여러 곳에서 하나의 객체를 참조하거나 공유할 수 있다.
HWND hWnd = pWnd -> m_hWnd;
-> 연산자는 포인터 변수를 통해 클래스나 구조체의 멤버에 접근할 때 사용되는 연산자이다
. 연산자는 객체의 멤버에 접근할 때 사용되지만, 포인터 변수를 사용할 때는 -> 연산자를 사용하여 해당 포인터가 가리키는 객체의 멤버에 접근한다. ( pWnd가 포인터)
함수 이름 자체가 해당 함수의 주소를 나타내므로 &
기호를 사용하지 않고 함수 포인터 선언 가능
❗[필수] 포인터 변수 이름은 반드시 괄호로 묶어주어야 한다.
리턴 타입 (*변수명)(인자 타입)
#include <iostream>
void myFunction(int x) {
std::cout << x << std::endl;
}
int main() {
void(*myFunc)(int) = myFunction;
myFunc(4);
return 0;
}
- 멤버 함수 포인터는 멤버 함수의 주소를 가리키기 때문에 멤버 함수의 이름 앞에 '&' 기호 사용해야 함
#include <iostream>
using namespace std;
class myClass {
public :
void myFunction(int x) {
cout << x;
}
};
int main() {
void (myClass:: * myFunc)(int) = &myClass::myFunction;
myClass obj;
(obj.*myFunc)(4);
return 0;
}
#include <stdio.h>
int sum(int _a, int _b) { return _a + _b; }
void printResult(int _a, int _b, int(*_pf)(int, int)) {
printf("Result = %d\n", _pf(_a, _b));
}
int main(void) {
int a = 0;
int b = 0;
scanf_s("%d %d", &a, &b); //입력받기
int (*pFunc)(int, int) = sum; //pFunc안에는 sum 함수의 시작 주소가 들어있음
printResult(a, b, pFunc);
return 0;
}
#include <stdio.h>
int sum(int a, int b) {
return a + b;
}
int sub(int a, int b) {
return a - b;
}
int mul(int a, int b) {
return a * b;
}
int main() {
int a = 0;
int b = 0;
scanf_s("%d %d", &a, &b);
printf("연산자를 선택하세요. 1.더하기 2.빼기 3.곱하기\n");
int op = 0;
scanf_s("%d", &op);
int(*sel[3])(int, int) = { sum, sub, mul };
/*int(*sel[3])(int, int);
sel[0] = sum;
sel[1] = sub;
sel[2] = mul;*/
int result = sel[op - 1](a, b);
printf("결과 : %d", result);
return 0;
}