• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

fptr1에 Something으로 접근 연산자를 붙히는 이유는 Something 클래스의 인스턴스 주소를 넘겨줘야해서 인가요?

24.01.12 02:07 작성 조회수 126

1

int (*fptr2)() = &Something::getValue;

는 단순히 정적 메모리에 있는 Something클래스의 함수 포인터를 초기화한다고 이해 할 수 있지만

 

제목 그대로의 의문점이 있습니다.

답변 1

답변을 작성해보세요.

1

Soobak님의 프로필

Soobak

2024.01.12

안녕하세요, 답변 도우미 Soobak 입니다.

 

강의 약 12:00 부분 경의 int (Something::*fptr1)() = &Something::temp;int (*fptr2)() = &Something::getValue; 의 비교에 대한 질문이시군요.

말씀하신 내용이 맞습니다.
fptr1Something 클래스의 멤버 함수 temp 를 가리키는 포인터입니다.
temp 는 정적 멤버 함수가 아니기 때문에, 호출을 위해서 Something 클래스의 인스턴스가 필요합니다.
따라서, fptr1 을 사용하여 temp 함수를 호출하려면 Something 의 인스턴스 주소와 함께 사용해야 합니다.

반면, fptr2Something 클래스의 정적 멤버 함수 getValue 를 가리키는 포인터입니다.
정적 멤버 함수는 클래스의 인스턴스와 무관하게 호출될 수 있으므로, 인스턴스 주소를 필요로 하지 않습니다.

 

강의 2:30 부분 경의 "특정 인스턴스와 상관 없이 사용할 수 있는 함수의 편의성" 에 대한 교수님 설명을 참고해보시면 이해에 더욱 도움이 되실 것 같습니다.