• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

8:11 질문 있습니다.

21.04.11 23:36 작성 조회수 109

0

제가 정확히 이해를 한건지 확인차 질문 드립니다. 

int(Something:: * fptr1)() = s1.temp;

이 부분이 오류가 생기는 이유가 static member function의 주소는 항상 하나인데 s1과 s2를 나눠서 호출했기 때문에 오루가 발생한게 맞나요? 

글로 적어보니까 제가 이해한 것이 아닌거 같은 느낌이 드네요.

왜 오류가 생기는 걸까요? 강의 내용만으로는 이해를 잘 못하겠네요.

답변 1

답변을 작성해보세요.

5

안소님의 프로필

안소

2021.04.13

안녕하세요!

멤버 함수 '호출'은 s1.temp(), s2.temp() 이렇게 객체로 접근하여 호출할 수 있지만, 멤버 함수의 '주소'는 객체로 접근할 수 없습니다. 즉, Something 클래스의 멤버 함수인 temp 의 주소를 "s1.temp"  로 가져올 수 없습니다. 객체마다 개별적 메모리를 가지는 멤버 변수와 달리 멤버 함수는 객체 메모리에 종속되있지 않고 어딘가 딱 한군데에만 저장되어 있고 각 객체마다 그 공간에 동일하게 접근하여 각자의 다른 데이터로 사용하는 방식이기 때문입니다. 따라서 멤버 함수의 주소를 가져오려면 "해당 멤버 함수가 속해있는 클래스가 어디인지"를 알려주어야 합니다 :) 

https://stackoverflow.com/questions/2402579/function-pointer-to-member-function