共用方式為


指向成員的指標

宣告指向成員的指標是特殊的情況,指標宣告。 這些就是使用下列程序的宣告:

[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 + + 抽象宣告子