C++ 函数指针

1 、函数指针的定义

int (*fp)(int a);//定义了一个指向函数的指针

int *fp(int a);//错误,这是一个返回整形指针的函数了,而不是函数指针。

int _tmain(int argc, _TCHAR* argv[])
{
	
	//////////////////////////////////////////////////////////////////////////Example1
	cout << FuncTestMethod <<endl; //输出函数地址
  	int (*fPtr)(int i);//定义函数指针
	fPtr = FuncTestMethod;//;//将函数FuncTestMethod的地址赋给函数指针fPtr
	cout << fPtr(5) << " | " << (*fPtr)(15) <<endl;
	//上面的输出fp(5),这是标准c++的写法,(*fp)(15)这是兼容c语言的标准写法,两种同意,但注意区分,避免写的程序产生移植性问题! 

	//////////////////////////////////////////////////////////////////////////Example2
	cout << FuncTestMethod <<endl; //输出函数地址
	typedef	int (*fPtr)(int i);//定义函数指针类型,类型名为fPtr。typedef定义可以简化函数指针的定义 
	fPtr f;//这里利用自己定义的类型名fPtr定义了一个f的函数指针! 
	f = FuncTestMethod;//;//将函数FuncTestMethod的地址赋给函数指针fPtr
	cout << fPtr(5) << " | " << (*fPtr)(15) <<endl;
	//上面的输出fp(5),这是标准c++的写法,(*fp)(15)这是兼容c语言的标准写法,两种同意,但注意区分,避免写的程序产生移植性问题! 
	return 0;
}
int FuncTestMethod(int i)
{
	return i;
}

  

2、函数指针所指向的函数,必须为全局函数或类的静态函数

class FuncPtr
{

	typedef int (*func)(void);
public:
	void FuncPtrTet(func func1)
	{
		(*func1)();
	};
	static int display(void)
	{
		cout <<"display"<<endl;
		return 0;
	}
};

  

int display2(void)
{
	cout <<"display2"<<endl;
	return 2;
}

  实现

int _tmain(int argc, _TCHAR* argv[])
{
	FuncPtr f;
	f.FuncPtrTet(FuncPtr::display);
	f.FuncPtrTet(display2);

	return 0;
}

  

原文地址:https://www.cnblogs.com/linlf03/p/2252525.html