C++复习之函数指针

函数指针

/* test01-函数指针和回调函数复习 
   1. 声明普通指针时,必须提供指针的类型。
      同样,声明函数指针时,也必须提供函数类型,
      函数的类型是指返回值和参数列表(函数名和形参名不是)
   2. C++中,函数名就是函数的地址 
   
   test02-回调函数的使用场景总结:
   1. 用函数指针回调函数和用函数名调用函数的意义不同 
   2. 回调函数是把一个函数的代码嵌入到另一个函数中 
      调用者函数提供了主体的流程和框架,具体功能由回调函数完成 
   3. 在写回调函数时只关心种类,不关心具体功能 
   
   test03-如何给回调函数传递参数?
   1. 一种是有调用者提供实参
   2. 另一种把实参从外面传进去 
*/

//test01-初识函数指针 
#include 
using namespace std;

void func(int no,string str)
{
	cout<<"小小的"<<no<<"号:"<<str<<endl;
}
int main() 
{
	int bh=3;
	string message="我是一只小草龟。";
	
	func(bh,message);  
	
	void(*pfunc)(int,string);  //声明表白函数的函数指针
	pfunc=func;  //对函数指针赋值,语法:函数指针名=函数名 
	pfunc(bh,message);  //C++写法 用函数指针名来调用函数,语法是:函数指针名(实参)
    (*pfunc)(bh,message);  //C语言写法 用函数指针名来调用函数
}

#endif


//test02-函数指针的作用 
#if 0
#include 
using namespace std;

void zs()  //张三的个性化表白函数   //返回值和参数类型一定相同 
{
    cout<<"翻三个跟斗。\n";  //个性化表白的代码	
} 

void ls()  //李四的个性化表白函数   //返回值和参数类型一定相同 
{
    cout<<"我由一只小草龟。\n";  //个性化表白的代码	
} 

//在表白神器里面,用函数指针就可以调用个性化表白函数。 
//这种调用就叫函数的回调。 (个性化表白函数就是回调函数)
void show(void(*pf)())
{
	cout<<"表白之前工作已完成。\n";  //表白之前准备工作
	
	pf();  //个性化表白函数指针p();
	
	cout<<"表白之后工作已完成。\n";  //表白之后的收尾工作 
 } 

int main()
{
	//show(zs);  //把张三的函数名作为参数传递给表白神器函数 
	show(ls); 
	cout<<"hhhhhh"<<endl; 
}

#endif


//test03-给回调函数传递参数
#if 0
#include 
using namespace std;

//给回调函数增加一个形参 
void zs(int a)  
{
    cout<<"a="<< a <<"翻三个跟斗。\n";  //个性化表白的代码	
} 

void ls(int a)  
{
    cout<<"a="<< a <<"我是一只小草龟。\n";  //个性化表白的代码	
} 

//在表白神器里面,用函数指针就可以调用个性化表白函数。 
//这种调用就叫函数的回调。 (个性化表白函数就是回调函数)
//void show(void(*pf)(int)) //1) 由调用者提供实参(写数据类型就可以了) 
void show(void(*pf)(int),int b) //2) 把实参从外面传进去 
{
	cout<<"表白之前工作已完成。\n";  //表白之前准备工作
	//int b=3; //1)
	pf(b);  //1) 用函数指针调用回调函数时,把实参传入回调函数 
	
	cout<<"表白之后工作已完成。\n";  //表白之后的收尾工作 
 } 

int main()
{
	//show(zs);  //把张三的函数名作为参数传递给表白神器函数 
	//show(ls);   //1)
	show(ls,3);   //2)
	show(zs,4);   //2)
	cout<<"hhhhhh"<<endl; 
}

你可能感兴趣的:(C++复习,c++)