普通的函数使用方法:
#include <iostream>
using namespace std;
int Power(int, int);
int main()
{
cout << Power(2, 4) << endl;
return 0;
}
int Power(int num1, int num2)
{
int result = 1;
for(int i = 0; i < num2; i++)
{
result *= num1;
}
return result;
}
使用函数指针来调用Power这个函数:
此段代码的核心语句:
1. int (*ptrPower)(int, int);
定义一个函数指针,这个函数指针的参数列表为(int, int)型。函数的返回值为int型
2. ptrPower = Power;
将这个函数指针指向之前定义的Power函数
3. cout << ptrPower(2, 4) << endl;
此处调用ptrPower这个函数指针的时候,就相当于调用了Power这个函数
#include <iostream>
using namespace std;
int Power(int, int);
int main()
{
int (*ptrPower)(int, int); 定义一个函数指针,这个函数指针的参数列表为(int, int)型。函数的返回值为int型
ptrPower = Power; 将这个函数指针指向之前定义的Power函数
cout << ptrPower(2, 4) << endl; 此处调用ptrPower这个函数指针的时候,就相当于调用了Power这个函数
return 0;
}
int Power(int num1, int num2)
{
int result = 1;
for(int i = 0; i < num2; i++)
{
result *= num1;
}
return result;
}
函数指针的应用: 计算器的实现
main函数部分:
#include <iostream>
#include "Calculate.h"
using namespace std;
int main()
{
Menu();
return 0;
}
Calculate.h部分:
#ifndef CALCULATE_H_INCLUDED
#define CALCULATE_H_INCLUDED
#include <iostream>
using namespace std;
/*定义四种运算方法: +-*\ */
double Addition(double, double);
double Subtraction(double, double);
double Multiplication(double, double);
double Division(double, double);
void Menu();//菜单函数
void PrintResult(double (*)(double, double), double, double);//打印结果函数
#endif // CALCULATE_H_INCLUDED
Calculate.cpp实现部分:
#include <iostream>
#include "Calculate.h"
using namespace std;
double Addition(double num1, double num2)//加法
{
double result;
return result = num1 + num2;
}
double Subtraction(double num1, double num2)//减法
{
double result;
return result = num1 - num2;
}
double Multiplication(double num1, double num2)//乘法
{
double result;
return result = num1 * num2;
}
double Division(double num1, double num2)//除法
{
double result;
if(0 == num2)//除数不能为0
{
cout << "num2不能为0!" << endl;
exit(-1);
}
return result = num1 / num2;
}
void PrintResult(double (*ptrfunc)(double, double), double num1, double num2, char symbol)
{
double result = ptrfunc(num1, num2);
cout << num1 << symbol << num2 << " = " << ptrfunc(num1, num2) << endl;
}
void Menu()
{
int choice = -1;
cout << "欢迎使用 按1 开始使用 其他键退出" << endl;
cin >> choice;
while(1 == choice)
{
cout << "欢迎使用!" << endl;
int num1, num2;
char symbol;
//double (*ptrCalc)(double, double);//定义的函数指针,在C++11之后,也可以定义为 auto ptrCalc;
auto ptrCalc = Addition;//但是使用的时候要先进行初始化
//也可以使用 typedef double (*ptrCalc)(double, double); ptrCalc PtrCalc; 此时 ptrCalc 为一个类型,函数指针为 PtrCalc
cout << "请输入第一个数: ";
cin >> num1;
cout << "请输入运算符: ";
cin >> symbol;
cout << "请输入另一个数: ";
cin >> num2;
switch(symbol)
{
case '+': //如果是"+"号
ptrCalc = Addition;//将函数指针指向加法函数
break;
case '-': //如果是"-"号
ptrCalc = Subtraction;//将函数指针指向减法函数
break;
case '*': //如果是"*"号
ptrCalc = Multiplication;//将函数指针指向乘法函数
break;
case '/': //如果是"/"号
ptrCalc = Division;//将函数指针指向除法法函数
break;
default:
cout << "输入的符号不正确, 请重新输入!" << endl;
break;
}
PrintResult(ptrCalc, num1, num2, symbol);
cout << "欢迎使用 按1 开始使用 其他键退出" << endl;
cin >> choice;
}
cout << "谢谢使用!欢迎下次使用!" << endl;
return;
}