函数指针调用普通函数
#include<iostream>
using namespace std;
void Show()//void(*)()
{
cout << "void _cdecl Show()" << endl;
}
typedef void(*PFUNC)();//类型重定义 函数指针
int main()
{
cout << typeid(&Show).name()<< endl;
PFUNC func = &Show;//func变量
(*func)();//函数指针调用Show
return 0;
}
打印结果:
由void (__cdecl*)(void) 可知其类型
typedef void(*PFUNC)(); //类型重定义 PFUNC为函数指针
同理,函数指针调用类方法
#include<iostream>
using namespace std;
class CShow
{
public:
void Show()
{
cout << "void _thiscall Show()" << endl;
}
};
typedef void(CShow::*CPPFUNC)();
int main()
{
CShow show;
cout << typeid(&CShow::Show).name() << endl;
CPPFUNC cppfunc = &CShow::Show;//cppfunc变量
(show.*cppfunc)();//函数指针调用Show
return 0;
}
打印结果:
这里需要注意的是,类成员方法需依赖于对象的调用,所以需 CShow show; 先生成一个对象。
注意: .* 运算符 会出现在函数指针调用类成员方法时。
当然,也会有 ->*运算符,也会出现在函数指针调用类成员方法时。
int main()
{
CShow* pshow = new CShow();
cout << typeid(&CShow::Show).name() << endl;
CPPFUNC cppfunc = &CShow::Show;//cppfunc变量
(pshow->*cppfunc)();
return 0;
}