VS2017学习C++基础十二(函数指针)

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);

}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值