指向成員的指針
指向成員的指針的聲明是指針聲明的特例。使用以下序列來聲明它們:
[storage-class-specifiers] [cv-qualifiers] type-specifiers [ms-modifier]qualified-name ::* [cv-qualifiers] identifier[= & qualified-name :: member-name];
聲明說明符:
聲明符:
可選的初始值設定項:
像往常一樣,允許在單個聲明中使用多個聲明符(以及任何關聯的初始值設定項)。
指向類的成員的指針與普通指針不同,因為它有該成員的類型的類型信息和該成員所屬的類的類型信息。常規指針只標識內存中的一個對象或只具有其地址。指向類的某個成員的指針標識類的所有實例中的該成員。以下示例聲明類、Window 和一些指向成員數據的指針。
// pointers_to_members1.cppclass 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 是一個指針,它指向具有 Windowchar* 類型的類 的任何成員。類型 pwCaption 不是 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';
.* 和 主站蜘蛛池模板: 松原市| 丹东市| 衡水市| 舞阳县| 浮山县| 拜泉县| 阿合奇县| 玉树县| 阳春市| 陆河县| 桐柏县| 大兴区| 衡南县| 石景山区| 德清县| 隆子县| 肥东县| 隆昌县| 外汇| 蛟河市| 青州市| 长岛县| 鄄城县| 象山县| 龙泉市| 莫力| 仪陇县| 新巴尔虎右旗| 泾川县| 辉县市| 永和县| 青州市| 积石山| 沂源县| 吴旗县| 顺平县| 定州市| 平凉市| 伊宁县| 曲麻莱县| 天峨县|