成員指針如何聲明函數
如何將成員指針綁定到一個對象上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; }