函数指针的使用(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;
}











 

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