Sdílet prostřednictvím


Odkazy na členy

Prohlášení o odkazy na členy jsou speciální případy ukazatel prohlášení.Jsou deklarovány pomocí následující posloupnosti:

[storage-class-specifiers] [cv-qualifiers] type-specifiers [ms-modifier]
qualified-name ::* [cv-qualifiers] identifier
[= & qualified-name :: member-name];
  1. Specifikátor deklarace:

    • Volitelné úložiště tříd:.

    • Volitelný const a volatile specifikátory.

    • Specifikátor typu: název typu.Typ člena se odkazuje, není třída.

  2. Declarator:

    • Volitelné Microsoft zvláštní modifikátor.Další informace naleznete v tématu Microsoft specifické modifikátory.

    • Kvalifikovaný název třídy obsahující odkazovat na členy.Viz názvy a kvalifikovanou.

    • :: Operátor.

    • * Operátor.

    • Volitelný const a volatile specifikátory.

    • Identifikátor pojmenování ukazatel myši na člena.

    • Inicializátor volitelné:

= Operátor.

& operátor.

Kvalifikovaný název třídy.

:: Operátor.

Název nestatické členem třídy příslušného typu.

Jako vždy více declarators (a všechny přidružené Inicializátory) jsou povoleny v jediné prohlášení.

Ukazatel na člen třídy se liší od normální ukazatel, protože obsahuje informace o typu pro typ člena a třídy, do které patří člen.Označuje normální ukazatel (má adresu) pouze jeden objekt v paměti.Ukazatel na člen třídy identifikuje členu v libovolné instance třídy.Následující příklad prohlašuje třídy, Windowa některé odkazy data členů.

// 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()
{
}

V předchozím příkladu pwCaption je ukazatel na kterýkoli člen třídy Window , která má typ char *.The type of pwCaption is char * Window::*.Další fragment kódu deklaruje ukazatele na SetCaption a GetCaption funkce členů.

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

Ukazatelů pfnwGC a pfnwSC přejděte na GetCaption a SetCaption z Window resp. class.Kód zkopíruje informace přímo pomocí ukazatele myši na člena titulek okna 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';

Rozdíl mezi . * a – > * operators (operátoři ukazatel myši na člen), je . * operátor vybere členy dané objekt nebo odkaz na objekt, zatímco – > * operátor vybere členy prostřednictvím ukazatele.(Další informace o těchto operátorů naleznete v výrazy s operátory ukazatel myši na člen.)

Výsledkem operátorů ukazatel myši na člena je typ člena – v tomto případě char *.

Vyvolá následující fragment kódu funkce členů GetCaption a SetCaption použití ukazatele na členy:

// 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 );

Viz také

Referenční dokumentace

Abstraktní C++ Declarators