类数据成员
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);
}