#include "stdafx.h"
#include <iostream>
using namespace std;
class Widget
{
public:
Widget()
{
//对函数指针数组进行初始化 一定要加Widget::
fptr[0] = &Widget::f;
fptr[1] = &Widget::g;
fptr[2] = &Widget::h;
fptr[3] = &Widget::i;
}
void select(int i, int val)
{
(this->*fptr[i])(val);
//this-> 一定不能省略 因为指向类中非静态成员的指针在被调用的时候
//必须用一个对象去调用
}
int count()
{
return cnt;
}
private:
void f(int val) { cout << "void f(int val)" << val << endl; }
void g(int val) { cout << "void g(int val)" << val << endl; }
void h(int val) { cout << "void h(int val)" << val << endl; }
void i(int val) { cout << "void i(int val)" << val << endl; }
enum{ cnt = 4 }; //运用到常量时用枚举类型 可以不用定义名字
void(Widget::*fptr[cnt])(int); //定义指向类成员函数的指针数组
//因为四个成员函数有很多的共同点
//而指向类成员的指针类型可以包含这些共同点
//所以用这种类型的指针数组来存放函数 实现更加隐蔽的调用
};
int _tmain(int argc, _TCHAR* argv[])
{
Widget w;
for (int i = 0; i < w.count(); i++)
{
w.select(i, 23);
}
return 0;
}
利用指向类成员函数的指针数组,实现更加隐蔽的接口
最新推荐文章于 2022-04-28 16:10:36 发布