C++编程指向成员的指针以及编程指向成员的指针以及this指针的基本使用指南指针的基本使用指南
指向成员的指针指向成员的指针
指向成员的指针的声明是指针声明的特例。使用以下序列来声明它们:
[storage-class-specifiers] [cv-qualifiers] type-specifiers [ms-modifier] qualified-name ::* [cv-qualifiers] identifier
[= & qualified-name :: member-name];
声明说明符:
可选存储类说明符。
可选 const 和/或 volatile 说明符。
类型说明符:类型的名称。这是要指向的成员的类型,而不是类。
声明符:
可选的 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 是一个指针,它指向具有 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 );