首页 / C++ / C++primer第五版 函数指针
C++primer第五版 函数指针
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++primer第五版 函数指针,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3521字,纯文字阅读大概需要6分钟。
内容图文
![C++primer第五版 函数指针](/upload/InfoBanner/zyjiaocheng/856/2468c116a8474b829fc39eaec9c2d80e.jpg)
指针在c++中既是重点又是难点,最开始学指针的时候就已经很绕了,然后接触函数指针的时候,就彻底晕了。很多书在编写函数指针这一块时讲得并不清楚,这里推荐一篇总结函数指针还不错的博客,可以学习一下
https://www.cnblogs.com/zrtqsk/p/4254765.html
函数指针指向的是函数而非对象。和其他指针一样,函数指针指向某种特定类型,函数的类型由它的返回类型和形参类型共同决定,与函数名无关。
这里,我先以C++primer第五版6.7节的几个练习为例编写代码熟悉函数指针的使用。具体要求如下:
1. 编写函数的声明,令其接受两个int形参并且返回类型也是int;然后声明一个vector对象,令其元素是指向该函数的指针。
2. 编写4个函数,分别对两个int值执行加、减、乘、除运算,在创建的vector对象中保存指向这些函数的指针。
3. 调用vector对象中的每个元素并输出其结果。
先附上代码
// primer_6_7.cpp : Defines the entry point for the application.
// 编写函数的声明,令其接受两个int形参并且返回类型也是int;然后声明一个vector对象,令其元素是指向该函数的指针。
// 编写4个函数,分别对两个int值执行加、减、乘、除运算,在创建的vector对象中保存指向这些函数的指针。
// 调用vector对象中的每个元素并输出其结果。
#include "stdafx.h"
#include<iostream>
#include<vector>
using namespace std;
int main()
{
typedef int(PF)(int,int); //使用类型别名,将PF定义成函数类型
PF *result; //显式地指定返回类型是指向函数的指针
int fun_add(int,int); //函数声明,对两个int值执行加法运算
int fun_sub(int,int); //函数声明,对两个int值执行减法运算
int fun_multi(int,int); //函数声明,对两个int值执行乘法运算
int fun_div(int,int); //函数声明,对两个int值执行除法运算
vector<int> vec; //声明一个vector对象
int flag=1; //让用户选择是否继续计算而定义的一个标志
int temp; //保存计算结果的变量
int num_a,num_b; //用户输入的两个数
while(flag) //flag为1意味着用户希望继续计算,为0意味着用户希望退出
{
cout << "input two numbers: " << endl; //让用户输入两个数
cin >> num_a >> num_b;
cout << "choose a operation: (a b c d)" << endl; //让用户选择进行哪种操作
cout << "(a) add\t(b) substraction" << endl;
cout << "(c) multiplication\t(d) divide" << endl;
char choose;
cin >> choose;
switch(choose) //对不同的选择进行不同的操作
{
case 'a':
result=fun_add;
temp=result(num_a,num_b);
vec.push_back(temp);
cout << num_a << " + " << num_b << " = " << *(vec.end()-1) << endl;
//输出结果,*(vec.end()-1)表示vec容器中最后添加进来的值
break;
case 'b':
result=fun_sub;
temp=result(num_a,num_b);
vec.push_back(temp);
cout << num_a << " - " << num_b << " = " << *(vec.end()-1) << endl;
break;
case 'c':
result=fun_multi;
temp=result(num_a,num_b);
vec.push_back(temp);
cout << num_a << " * " << num_b << " = " << *(vec.end()-1) << endl;
break;
case 'd':
result=fun_div;
temp=result(num_a,num_b);
vec.push_back(temp);
cout << num_a << " / " << num_b << " = " << *(vec.end()-1) << endl;
break;
}
cout << "go on? y or n" << endl; //让用户选择是否继续计算
char y_or_n;
cin >> y_or_n;
if(y_or_n=='y')
flag=1;
if(y_or_n=='n')
flag=0;
}
system("pause");
return 0;
}
//定义加、减、乘、除函数
int fun_add(int a,int b)
{
return (a+b);
}
int fun_sub(int a,int b)
{
return a-b;
}
int fun_multi(int a,int b)
{
return a*b;
}
int fun_div(int a,int b)
{
return a/b;
}
为了与用户的交互性更好,我打印出了加、减、乘、除四种数学运算的操作选项让用户选择一种操作;然后还定义了一个标志变量flag,让用户选择继续计算或者退出计算。这些考虑是为了让程序更实用,但是本篇博客的根本目的还是联系函数指针的使用哈。
首先看下面一行代码
typedef int(PF)(int,int); //使用类型别名,将PF定义成函数类型
这里是使用类型别名,定义一个函数类型
PF *result; //显式地指定返回类型是指向函数的指针
这里定义一个函数指针
然后根据用户选择的操作,在case中将不同的函数地址赋给该指针,再用指针进行函数调用,最后输出计算结果。
效果如下:
内容总结
以上是互联网集市为您收集整理的C++primer第五版 函数指针全部内容,希望文章能够帮你解决C++primer第五版 函数指针所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。