C++之函数指针做函数参数、函数回调功能实现多态

目的是实现多态

函数指针做函数参数实现多态原理的必要条件。多态实现条件:1,有继承,2,虚函数重写,3,父类指针指向子类对象。在看C++的代码,主要是看有没有多态发生,也就是上面的3个条件。

多态原理

  1. C++编译器为每一个含有虚函数的子类和父类提前布局了一个vptr指针,通过该指针找到一个虚函数表,根据虚函数表找到后面执行的代码去执行;

  2. n个虚函数放在一个虚函数表中,虚函数表中存储了一个函数指针做函数参数,通过该函数指针,找到函数入口,然后执行自己写的代码(回调函数)

函数指针相关

定义一个函数类型

函数名是函数的入口地址,和指针等价

	int add(1,2); //直接调用,函数名就是函数的入口地址
	typedef int(MyFuncType)(int a,int b);//定义一个函数类型,返回值int
	MyFuncType *myPointerFunc=NULL;//定义一个指针,指向该类型的函数
	myPointerFunc=&add;//细节
	myPointerFunc=add;//细节,取地址和不取地址都可以
	myPointerFunc(3,4);//间接调用

定义一个函数指针类型

	int add(1,2); //直接调用,函数名就是函数的入口地址
	typedef int(*MyPointerFuncType)(int a,int b);//类似于int *a=null;定义一个函数指针类型,返回值int
	MyPointerFuncType myPointer;//定义一个指针
	myPointer=add;
	myPointer(3,4);

定义一个函数指针(指向函数的入口地址)

	int(*MyPointer)(int a,int b);//定义一个变量
	MyPointer=add;
	MyPointer(3,4);

用法

	#include<iostream>
	using namespace std;
	int add(int a,int b){return a+b;}
	int subtract(int a,int b){return a-b;}

	typedef int(*MyPointerFuncType)(int a,int b);//声明函数指针类型
	int func1(MyPointerFuncType myPointer)
	{
		cout<<myPoint(1,5)<<endl;
		return 0;
	};
	int func2(int(*MyPointerFuncType)(int a,int b)) 
	{
		cout<<MyPointerFuncType(1,5)<<endl;
		return 0;
	};

	int main()
	{
		func1(add);
		func1(subtract);
		fun2(add);
		func2(subtract);	
		system("pause");
		return 0;
	}

作用

在这里插入图片描述
将任务的实现者和任务的调用者实现解耦合,达到扩展的目的。诸葛亮写锦囊在先,刘备打开锦囊,具体操作在后。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值