类数据成员 1. 数据成员 2. 函数成员
定义
<数据类型><类名>::*<指针名>赋值&初始化
<数据类型><类名>::*<指针名>[=&<类名>::<非静态数据成员>] //和类发生关系,整个过程没有和对象发生关系指向类成员的指针 类名::成员名 类名::成员函数名
// 类 成员类型 类名::*指针名 = &类名::成员名; 函数返回类类型 (类名::*函数指针名)(参数列表) = &类名::成员函数名; // 对象 // .* ->* 对象.*数据成员指针 对象指针->*数据成员指针 (对象.*成员函数指针)() (对象指针->*成员函数指针)() class Widget { public: Widget() { pa[0] = &f; pa[1] = &g; pa[2] = &i; pa[3] = &j; } void select(int idx) { (this->*pa[idx])(); } private: void f(){cout<<"void f()"<<endl;} void g(){cout<<"void g()"<<endl;} void i(){cout<<"void i()"<<endl;} void j(){cout<<"void j()"<<endl;} enum{cnt = 4}; void(Widget::f*pa[cnt])() = {f, g, i, j}; } // 不同的平台对Widget::f的需要也不同 int main() { Widge w; w.select(int idx); }