"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > C ++에서 멤버 기능 포인터를 올바르게 호출하는 방법은 무엇입니까?

C ++에서 멤버 기능 포인터를 올바르게 호출하는 방법은 무엇입니까?

2025-03-23에 게시되었습니다
검색:979

How to Correctly Invoke a Member Function Pointer in C  ?

잘못된 코드 스 니펫 :

클래스 cat { 공공의: void walk () { printf ( "고양이는 걷고 있습니다 \ n"); } }; int main () { 고양이 bigcat; void (cat ::*pcat) (); pcat = & cat :: Walk; bigcat.*pcat (); }

컴파일 오류 : bigcat.*pcat (); 명령문은 오류를 생성합니다.

솔루션 :

class cat {
public:
   void walk() {
      printf("cat is walking \n");
   }
};

int main(){
   cat bigCat;
   void (cat::*pcat)();
   pcat = &cat::walk;
   bigCat.*pcat();
}
이 문제를 해결하기위한 열쇠는 bigcat 표현을 보장하는 데 있습니다.*pcat ()는 적절한 우선 순위를 갖습니다. 연산자 우선 순위는 단독 연산자가 이진 연산자보다 우선한다고 지시합니다. 따라서, 포인터 투-멤버 바인딩 작업에서 함수 호출 ()의 우선 순위를 정하기 위해 괄호가 필요합니다.*.

(bigcat.*pcat) (); ^ ^

괄호 안에 함수 호출을 둘러싸는 것은 먼저 실행을 보장하고, 멤버 함수 포인터 바인딩에 이어 실행을 보장합니다. 연산자.

괄호는 연산자 우선 순위를 제어하고 올바른 실행 순서를 보장하는 데 사용될 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3