函數指針主要的目的是實作與運用互相分離,類的成員函數封裝在類裡面,運作需要相應的對象來調用,是以在調用這個類的成員函數時候,需要類的函數位址和這個類的對象。
以下是實作的類:
class A
{
public:
void DoSth()
{
printf("A-DoSth");
}
};
以下是調用的類:
typedef void (A::*PFun)(void);//聲明類的函數指針
class B
B(void):pA(NULL),pFun(NULL)
{
}
~B(void)
{
}
void SetAddr(A* pA,PFun pAddr)
{
this->pA = pA;
pFun = pAddr;
}
void RunFun()
{
if(pA&&pFun)
(pA->*pFun)();
private:
A* pA;
PFun pFun;
};
以下是綜合使用部分:
A a;
B b;
PFun pAddr = &A::DoSth;//類的成員函數位址
b.SetAddr(&a,pAddr);
b.RunFun();
總結:
使用函數指針多數在多線程裡。
參考:
高品質程式設計指南-C++/C 語言