普通的函數使用方法:
#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;
}