指向成员的指针
指向成员的指针的声明是特殊情况指针声明。使用以下顺序,声明:
[storage-class-specifiers] [cv-qualifiers] type-specifiers [ms-modifier]
qualified-name ::* [cv-qualifiers] identifier
[= & qualified-name :: member-name];
声明说明符:
一种选项存储类说明符。
选项 const 和 volatile 说明符。
类型说明符:类型的名称。这是将指向的该成员的类型设置为,而不是类。
声明:
一个选项特定于 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 是指向具有类型 **char***类 Window 的所有成员。pwCaption 的类型是 char * Window::*。下面的代码片段将指针声明为 SetCaption 和 GetCaption 成员函数。
const char * (Window::*pfnwGC)() = &Window::GetCaption;
bool (Window::*pfnwSC)( const char * ) = &Window::SetCaption;
指针 pfnwGC 和 pfnwSC 指向 Window 类的 GetCaption 和 SetCaption ,分别。代码复制到窗口标题信息直接使用指向成员 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';
在 . * 和 – AMP_GT* 运算符 (指向成员的指针运算符) 之间的区别是 . * 运算符选择成员为对象或对象引用,,而 – AMP_GT* 运算符通过指针选择成员。(有关更多有关这些运算符,请参见 用指向成员的指针运算符的表达式。)
指向成员的指针运算符的结果为该成员的类型 (在这种情况下, 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 );