1.使用函数指针计算数字的乘幂
// chapter12a04函数指针.cpp
//先定义函数,在定义函数指针
//函数也有地址,函数的地址是存储其机器语言代码的内存开始地址
//函数指针的好处:可以在不同的时间使用不同的函数
/*
* 函数指针的声明
*函数原型:
* double sum(double,double);
*函数指针声明
*double (*ptrSum)(double,double)
*1.该语句声明了一个指针ptrSum,指向一个函数
*2.double *ptrSum(double,double) 不是函数指针,而是声明了一个函数ptrSum,返回double *类型
*/
#include <iostream>
using namespace std;
//函数声明
int power(int, int);
// 函数定义
int power(int num1, int num2)
{
int result = 1;
for (int i = 0; i < num2; i++)
{
result *= num1;
}
return result;
}
int main()
{
//声明函数指针 PtrPower
int(*PtrPower)(int, int);
//让声明的函数指针指向函数,以便调用
PtrPower = power;
cout << PtrPower(3, 4) << endl;
}
2.使用函数指针实现加减乘除运算
头文件
#ifndef MYCALCULATER_H
#define MYCALCULATER_H
//自定义计算器
#pragma once
#include <iostream>
using namespace std;
//函数声明
double addition(double , double); //加法
double subtraction(double, double); //减法
double multiplication(double, double); //乘法
double division(double, double); //除法
//打印计算结果,函数声明
void printResult(double(*)(double, double), double, double);
//打印计算结果,函数定义
void printResult(double(*ptrCal)(double, double), double num1, double num2)
{
//调用函数,打印结果
double result = ptrCal(num1, num2);
cout << "运算结果为:" << result;
}
//函数定义
double addition(double num1, double num2) //加法
{
return num1 + num2;
}
double subtraction(double num1, double num2) //减法
{
return num1 - num2;
}
double multiplication(double num1, double num2) //乘法
{
return num1 * num2;
}
double division(double num1, double num2) //除法
{
if (num2 == 0)
{
cout << "除数不能为0!"<<endl;
return 0;
}
return num1 / num2;
}
#endif //MYCALCULATER_H
源文件:
#include <iostream>
#include "MyCalculater.h"
using namespace std;
int main()
{
//定义函数指针
double (*ptrCal)(double, double);
//或者使用 auto
//auto ptrCal = addition;
double num1, num2;
char op;
cout << "请输入两个数:";
cin >> num1 >> num2;
cout << "请输入运算符:";
cin >> op;
switch (op)
{
case '+':
//调用加法函数
ptrCal = addition;
break;
case '-':
//调用减法函数
ptrCal = subtraction;
break;
case '*':
//调用乘法函数
ptrCal = multiplication;
break;
case '/':
//调用除法函数
ptrCal = division;
break;
default:
break;
}
//调用
printResult(ptrCal, num1, num2);
}
运行结果: