成员指针如何声明函数
如何将成员指针绑定到一个对象上spa
成员指针的意义是什么指针
如何经过成员指针来访问类的成员code
静态成员(包括静态数据成员,静态成员函数):他们的指针是普通指针,如:
对象
struct X{ static int _x; public: static void println( void ){ Println("HelloWorld: %d",_x); } }; int X::_x=33; int main( int argc,char *argv[] ){ int *ptr=&X::_x; /* 普通的int*指针 */ Println("%p",ptr); void (*fptr)( void )=&X::println;/* 普通的函数指针 */ fptr(); }
非静态成员(包括数据与函数),他们的指针须要特别声明.见下编译器
声明的语法: 变量类型 类名::*成员指针变量名;编译
绑定的语法:成员指针变量名=&类名::成员
class
成员指针的意义:也即该成员在类对象中的偏移值,是一个编译器便可肯定的常量.变量
访问:经过'.*'/'->*'运算符
语法
struct X{ int _x; public: void print( void ){ Println("%d",_x); } }; int main( int argc,char *argv[] ){ int X::*ptr=&X::_x; Println("%p",ptr); /* _x在X对象中的偏移:0 */ X x;X *xptr=&x; x.*ptr=44; /* 经过'.*'运算符对成员指针进行访问 * 语法: 对象.*成员指针; */ Println("%d",xptr->*ptr); /* 经过'->*'运算符对成员指针进行访问 * 语法: 对象指针->*成员指针; */ return 0; }
声明: 函数返回类型 (类名::*变量名)(参数列表)
绑定:变量=&类名::成员函数名
意义:该函数的地址
访问:经过'.*'/'->*'运算符
struct X{ int _x; public: void print( void ){ Println("%d",_x); } }; int main( int argc,char *argv[] ){ void (X::*ptr)( void )=&X::print; X x;X *xptr=&x; (x.*ptr)(); /* 注意括号,'x.*ptr'要首先被括号括起 */ (xptr->*ptr)(); Println("%p",ptr); return 0; }