C++ 函数指针 类成员函数函数指针
class TT
{
public:
int print(int a) {
cout << "int TT::print(int a):" << a << endl;
return a + 1;
}
static int prints(int a){
cout << "static int TT::prints(int a):" << a << endl;
return a + 1;
}
//int(*funp)(int) = print; //error:"int (TT::*)(int a)" 类型的值不能用于初始化 "int (*)(int)" 类型的实体
int(*funp)(int) = prints;
}
int print(int a) {
cout << "int print(int a):" << a << endl;
return a + 1;
}
int (*funp) (int);//定义一个函数指针变量
typedef int(*funpType) (int);//定义函数指针类型
int (TT::*TTFunp)(int);//定义一个成员函数指针变量
typedef int (TT::*TTFunpType)(int);//定义成员函数指针类型
int main()
{
int a = 0;
//成员函数指针使用
TTFunp = &TT::print; //TTFunp 是一个全局变量
TTFunpType ttfun = &TT::print;//TTFunpType 是一种类型
TT t;
TT *pt = &t;
//t.TTFunp(1);error
a = (t.*TTFunp)(1); //通过对象+成员函数指针来进行使用
a = (t.*ttfun)(2);
a = (pt->*TTFunp)(3);//通过对象指针+成员函数指针来进行使用
a = (pt->*ttfun)(4);
//函数指针使用
funp = print;
a = funp(5);//注意这三种方式都能正确运行
a = (funp)(5);
a = (*funp)(6);
funpType funt = print;
funt(7);
//*funt(7);error
//普通函数指针指向静态成员函数。
//TTFunp = TT::prints;//error:不能将 "int (*)(int a)" 类型的值分配到 "int (TT::*)(int)" 类型的实体
funp = TT::prints;
void * p = print; //void*万能指针作为普通函数指针的使用方法。
((int(*)(int))p)(1);
(*(int(*)(int))p)(1);
t();
}