您的位置:首页 > 编程语言 > C语言/C++

使用类成员函数指针调用C++成员函数的一种方式

2010-09-12 02:04 525 查看
1.类成员函数指针的定义
 
如果有一个类Class,内部有一个成员函数void func();
则可以定义指向这个类成员函数的指针:void (Class::*ptr)();
这个ptr就是我们定义的指向类成员函数的指针,当然这样定义形式很麻烦,所以可以定义一个指针类型
typedef void (Class::*CLSMEBPTR)();
然后用这个新定义的类型定义我们的指针CLSMEBPTR ptr;这个ptr就和前面的等同。
 
2.类成员函数指针的使用
需要用类对象/指针来调用类成员函数指针。方式如下:
Class obj1;
(obj.*ptr)();
Class * p1;
(p1->*ptr)();
 
利用类成员函数指针和指针数组,可以很方便的写出这种类成员函数调用形式
 
 
C++代码:
#include <iostream>
#include <bitset>
using namespace std;
 
#define FUNC1 0x01
#define FUNC2 0x02
#define FUNC3 0x04
 
struct CTest
{
     //定义类成员函数指针类型CPTR
     typedef void (CTest::*CPTR)();
 
     //定义类的成员函数
     void func1()
     {
         cout << "func1()" << endl;
     }
     void func2()
     {
         cout << "func2()" << endl;
     }
     void func3()
     {
         cout << "func3()" << endl;
     }
 
     //---------------------------------
     void func(_ULonglong lBit)
     {
         bitset<3> bt(lBit);
         for(int i = 0;i != 3;++i)
         {
              if(bt.at(i))
                   (this->*aCall[i])();
         }
     }
private:
     static CPTR aCall[];
};
 
CTest::CPTR CTest::aCall[] =
{
     &CTest::func1,
     &CTest::func2,
     &CTest::func3,
};
 
int main()
{
     //调用测试
     CTest o1;
     o1.func(FUNC1 | FUNC3);
 
     return 0;
}
 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ class struct bt 测试 c