函數指針的使用(C++版)

 普通的函數使用方法: 

#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;
}











 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章