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

本文深入探讨了C++中函数指针的概念及其在实现多态中的关键作用,详细解析了函数指针的定义、类型声明及使用方法,并通过实例展示了如何利用函数指针作为参数来实现回调功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的是实现多态

函数指针做函数参数实现多态原理的必要条件。多态实现条件: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;
	}

作用

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值