C++支持成员的指针储存,并且之后可以使用->*
, .*
来调用。
#include <iostream>
using namespace std;
class Test
{
public:
Test(int n=0) : aa(n) {}
Test( const Test & M ): aa(M.aa) {}
~Test() {}
public:
void Set( int n ) {
aa = n;
}
void Print() {
cout << aa << endl;
}
static void Yeah() {
cout << "Yeah" << endl;
}
private:
int aa;
};
// typedef函数指针
typedef void (Test::*FuncPtrType)();
// 直接赋值
void (Test::*ptrSet)(int) = &Test::Set;
// 静态函数
void (*PStaticYeah)() = &Test::Yeah;
int main()
{
// 静态函数不用与对象关联,所以在对象生成以前就能用
PStaticYeah();
Test * p = new Test(5);
// ->*
(p ->* ptrSet)( 10 );
FuncPtrType ptrPrint = &Test::Print;
(p ->* ptrPrint)();
// .*
((*p) .* ptrSet)( 15 );
((*p) .* ptrPrint)();
return 0;
}