与C语言不同的是两种函数调用方法不同的是pf(),(*pf)(),类成员函数指针只能用(*pf)()调用

类成员函数指针的调用方法只能靠对象调用,即使在类内也必须用this->*去调用,静态函数除外

class WOLF;
typedef void(WOLF::* Pf)();//指向类成员函数的类函数指针
class WOLF
{
public:
WOLF() {
pGroup = &WOLF::GrouUP0;
}
void GrouUP0()
{
(this->*pGroup)();//在类内只能通过this调用
std::cout << "hello world" << std::endl;
}
int x;
Pf pGroup ;//类函数指针数组
};
int main()
{
WOLF* pWolf = new WOLF;
Pf pf = pWolf->pGroup;
(pWolf->*pf)();//因为pWolf->*pGroup()优先级
(pWolf->*pWolf->pGroup)();
/*对应22段代码汇编层面,可见是先操作第二个this,再操作第一个this,再用第二个this调用pGroup,最后调用类成员函数
mov eax,dword ptr [pWolf]
mov ecx,dword ptr [pWolf]
mov edx,dword ptr [eax+4]
call edx
cmp esi,esp
call __RTC_CheckEsp (07C16AEh)
*/
//(pWolf->*pGroup)();//pGroup无法识别猜测是优先级问题
Pf pFunction = { &WOLF::GrouUP0 };
WOLF W1;
(W1.*pFunction)();
WOLF *W2 = new WOLF;
(W2->*pFunction)();
}