C++第六章:函数指针,重载函数指针 返回指向函数的指针

函数指针

bool leng (const string & ,const string &);
bool (*pf) (const string & ,const string &);//把上面的函数名替换为(*pf) ,既声明pf指向一个函数,但并未初始化
//函数指针指向的函数必须与自己声明的函数类型以及形参类型一致

pf = leng ; pf = &leng  //两个等价声明,pf指向leng函数,取地址符&是可选的
                        //当我们把函数名作为一个值使用时,函数自动转换成指针                    
                                
//那我们现在可以用pf调用函数了
pf(“hello”,"word";
(*pf)(“hello”,"word";
leng (“hello”,"word"; //以上三个都是等价的调用

pf =  ;//正确:pf不指向任何函数




重载函数的指针
一句话:返回类型和形参类型精确匹配:

void ff(int *);
void ff(unsigned int);
void (*p)(unsigned int) = ff;//p指向的是ff(unsigned int)
void (*p)( int) = ff;//错误:没有任何一个匹配
double (*p)( int*) = ff;//错误:返回类型不匹配

返回指向函数的指针:类似于返回指向数组的指针

   using F =int(int * , int); //F 是函数类型 不是指针
   using FF = int (*) (int * ,int) //FF是指针类型
 
   FF f1(int i); //正确 
   F  f1(int i);  //错误F是一个函数 不能返回一个函数
   F * f1(int i);   //正确 显示指定返回为指向函数的指针
   //直接声明
  int (*f1(int i))(int * , int);
   //尾zhi类型
  auto fi(int i)  -> int(*) (int * ,int );

举例应用返回指向函数的指针

int add(int a, int b)
{
	return a + b;
}
int substract(int a, int b)
{
	return a - b;
}

int main()
{
typedef  int(*p)(int a, int b);//声明函数指针,未初始化,p为指向函数的指针。
                               //使用typedef的声明语句定义的不再是变量而是类型别名
	                           //就是将变量转化为类型别名的一种方式,p原来是指向函数的指针变量,
	                           //现在变成了指向函数的指针变量的类型别名
using p = int (*) (int * ,int) //FF是指向函数指针类型 跟上面一样
vector<p> vec{add,substract};
	for (auto c : vec)
		cout << c(2, 2) << endl; //结果就是调用两个函数 输出 4 0
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值