다음을 통해 공유


멤버에 대 한 포인터

멤버에 대 한 포인터의 선언 포인터 선언 중 특수 한 경우입니다.다음 시퀀스를 사용 하 여 선언 된:

[storage-class-specifiers] [cv-qualifiers] type-specifiers [ms-modifier]
qualified-name ::* [cv-qualifiers] identifier
[= & qualified-name :: member-name];
  1. 선언 지정자:

    • 선택적 저장소 클래스 지정 자가 있습니다.

    • 선택적인 const 또는 volatile 지정자입니다.

    • 형식 지정자: 형식의 이름입니다.이를 가리키는 것으로 멤버의 형식입니다. 클래스가 없습니다.

  2. 선언 자:

    • 선택적 Microsoft 특정 한정자입니다.자세한 내용은 Microsoft 전용 한정자.

    • 가리키는으로 멤버를 포함 하는 클래스의 정규화 된 이름입니다.참조 하십시오 이름과 정규화 된 이름은.

    • :: 연산자입니다.

    • * 연산자입니다.

    • 선택적인 const 또는 volatile 지정자입니다.

    • 포인터 멤버 이름을 지정 하는 식별자입니다.

    • 선택적 이니셜라이저:

= 연산자입니다.

해당 연산자입니다.

클래스의 정규화 된 이름입니다.

:: 연산자입니다.

적합 한 형식의 클래스의 비정적 멤버의 이름입니다.

항상 선언 자를 여러 개 (및 모든 연결 된 이니셜라이저) 단일 선언에서 허용 됩니다.

멤버가 속한 클래스 및 멤버의 형식에 대 한 형식 정보가 있기 때문에 일반적인 포인터에서 클래스의 멤버에 대 한 포인터와는 다릅니다.일반 포인터로 식별 (주소 있습니다) 메모리에 개체를 하나만 있습니다.클래스의 멤버에 대 한 포인터 멤버에는 클래스의 인스턴스를 식별합니다.다음 예제에서는 클래스 선언 Window, 및 일부 데이터 구성원에 대 한 포인터입니다.

// pointers_to_members1.cpp
class Window
{
public:
   Window();                               // Default constructor.
   Window( int x1, int y1,                 // Constructor specifying
   int x2, int y2 );                       //  window size.
bool SetCaption( const char *szTitle ); // Set window caption.
   const char *GetCaption();               // Get window caption.
   char *szWinCaption;                     // Window caption.
};

// Declare a pointer to the data member szWinCaption.
char * Window::* pwCaption = &Window::szWinCaption;
int main()
{
}

앞의 예제에서 pwCaption 클래스의 모든 멤버에 대 한 포인터는 Window 형식을 가진 char *.The type of pwCaption is char * Window::*.다음 코드 조각에 대 한 포인터를 선언에서 SetCaption 및 GetCaption 멤버 함수입니다.

const char * (Window::*pfnwGC)() = &Window::GetCaption;
bool (Window::*pfnwSC)( const char * ) = &Window::SetCaption;

포인터 pfnwGC 및 pfnwSC 가리킵니다 GetCaption 및 SetCaption 에 Window 클래스를 각각.코드 멤버에 대 한 포인터를 사용 하 여 직접 창 캡션에 정보 복사 pwCaption:

Window wMainWindow;
Window *pwChildWindow = new Window;
char   *szUntitled    = "Untitled -  ";
int    cUntitledLen   = strlen( szUntitled );

strcpy_s( wMainWindow.*pwCaption, cUntitledLen, szUntitled );
(wMainWindow.*pwCaption)[cUntitledLen - 1] = '1';     //same as
//wMainWindow.SzWinCaption [cUntitledLen - 1] = '1';
strcpy_s( pwChildWindow->*pwCaption, cUntitledLen, szUntitled ); 
(pwChildWindow->*pwCaption)[cUntitledLen - 1] = '2'; //same as //pwChildWindow->szWinCaption[cUntitledLen - 1] = '2';

차이 . *– > * 연산자 (포인터 멤버 연산자) 되는 . * 연산자는 구성원 선택 개체 또는 개체 참조를 지정 하는 동안의 – > * 연산자는 포인터를 통해 멤버를 선택 합니다.(이러한 연산자에 대 한 자세한 내용은 참조 하십시오. 포인터 멤버 연산자를 사용 하 여 식을입니다.)

멤버의 형식 포인터 멤버 연산자의 결과입니다-이 경우 char *.

다음 코드 단편은 멤버 함수를 호출 합니다. GetCaption 및 SetCaption 멤버에 대 한 포인터를 사용 하 여:

// Allocate a buffer.
enum {
    sizeOfBuffer = 100
};
char szCaptionBase[sizeOfBuffer];

// Copy the main window caption into the buffer
//  and append " [View 1]".
strcpy_s( szCaptionBase, sizeOfBuffer, (wMainWindow.*pfnwGC)() );
strcat_s( szCaptionBase, sizeOfBuffer, " [View 1]" );
// Set the child window's caption.
(pwChildWindow->*pfnwSC)( szCaptionBase );

참고 항목

참조

C + + 추상 선언 자