使用类成员函数指针调用C++成员函数的一种方式
2010-09-12 02:04
701 查看
1.类成员函数指针的定义
如果有一个类Class,内部有一个成员函数void func();
则可以定义指向这个类成员函数的指针:void (Class::*ptr)();
这个ptr就是我们定义的指向类成员函数的指针,当然这样定义形式很麻烦,所以可以定义一个指针类型
typedef void (Class::*CLSMEBPTR)();
然后用这个新定义的类型定义我们的指针CLSMEBPTR ptr;这个ptr就和前面的等同。
2.类成员函数指针的使用
需要用类对象/指针来调用类成员函数指针。方式如下:
Class obj1;
(obj.*ptr)();
Class * p1;
(p1->*ptr)();
利用类成员函数指针和指针数组,可以很方便的写出这种类成员函数调用形式
如果有一个类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函数指针调用C++的类成员函…
- 使用纯C函数指针调用C++的类成员函数
- 使用纯C函数指针调用C++的类成员函数
- C++中的成员函数调用原理及this指针的传递方式
- 成员函数指针和其他类型的强制转换,使用一般指针调用成员函数
- 在VC6.0中创建和使用静态链接库&amp;amp;&amp;amp;C如何调用C++ 成员函数
- [转]浅谈C++指针直接调用类成员函数
- 浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?
- c++之——派生类的同名成员和函数调用方式及构造析构顺序
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- static函数 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针;类的static成员函数
- C++调用成员函数需要this指针的情况
- C++中空指针调用类成员函数的原理
- 关于C++成员函数指针的使用
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- error: 函数调用缺少参数列表;请使用“&BinTree<char>::_PrintNode”创建指向成员的指针
- 浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?
- 成员函数指针的使用方式
- 函数调用缺少参数列表;请使用“&****Dlg::getThread”创建指向成员的指针”--多线程函数调用
- C++成员函数指针详细使用指南