目录
五、函数
1、自定义函数完整写法
int sum(int, int);//函数原型
int main()
{
//函数调用
int result = sum(5,3);
}
//函数定义
int sum(int num1 ,int num2)
{
//函数实现的代码
}
注意:
-
函数原型与函数定义的头部类似,左后以分号结尾
-
函数原型中的参数名称可以省略,只写参数类型
-
C++中返回类型不能是数组,但可以是其他任何类型(可以将数组作为结构或者对象组成部分返回)
example:
void show (const int * ,const int *);
int main()
{
int valuearray[] = {90, 56, 67, 89, 100};
show(valuearray, valuearray + 4);
}
void show (const int * begin, const int * end)
{
for(const int* ptr = begin; ptr <= end ; ptr++)
{
cout << *ptr << ",";
}
}
2、函数指针
-
函数的地址是存储其机器语言的代码开始地址
-
好处:可在不同的时间使用不同的函数
2.1、函数指针的申明
//函数原型
double sun(double, double);
//函数指针声明
double(*ptrsum)(double, double)
注:
-
该语句声明了一个指针ptrsum,指向一个函数
-
double *ptrsun(double, double)不是指针函数,而是声明了一个函数ptrsun,返回double *类型
example1:
//power(int num1, int num2)函数在.h文件里面
int main()
{
//声明函数指针 ptrpower,等同于 int* ptrpower
int (*ptrsum)(int, int);
//让声明的函数指针指向函数,方便调用
ptrpower = power;
cout << ptrpower(3,4) << endl; //两者相等
cout << (*ptrpower)(3,4) << endl;
}
example2:
//计算加减乘除
//main.cpp
#include <iostream>
#include "calculation.h"
using namespace std;
int main()
{
//定义函数指针
double (*ptrcalc)(double, double); //可用auto ptrcalc = addition;
double num1,num2;
char op;
cout << "Please enter two operands:" << endl;
cin >> num1 >> num2;
cout << "Please enter the operator:" << endl;
cin >> op;
switch(op)
{
case '+':
ptrcalc = addition;
break;
case '-':
ptrcalc = subtraction;
break;
case '*':
ptrcalc = multiplication;
break;
case '/':
ptrcalc = division;
break;
}
//调用
print_result(ptrcalc ,num1,num2);
return 0;
}
//calculation.h
#ifndef CALCULATION_H_INCLUDED
#define CALCULATION_H_INCLUDED
#include <iostream>
using namespace std;
//自定义计算器,使用函数指针
/**加法*/
double addition(double, double);
/**减法*/
double subtraction(double, double);
/**乘法*/
double multiplication(double, double);
/**除法*/
double division(double, double);
/**打印计算结果*/
void print_result(double (*)(double, double), double, double);
//double (*)(double, double)为函数指针类型
//(*)为函数名,必须有两个(double, double)的参数
//后面的两个double为参数,传入函数
void print_result(double(*ptrcalc)(double,double), double num1, double num2)
{
//调用函数,打印数组
double result = ptrcalc(num1,num2);
cout << "The result is:" << result << endl;
}
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 << "The divisor cannot be zero!" << endl;
return 0;
}
return num1 / num2;
}
#endif // CALCULATION_H_INCLUDED
注:
-
C++11中可以使用auto ptrFunc = addition;自动推荐类型(自动类型需要确保变量的类型与初值类型一致)
auto ptrcalc = addition; //使用auto需要初始化
-
可以使用typedef简化声明:
typedef double (*ptrcalc)(double); //ptrcalc为新的类型
ptrcalc ptrFunc; //ptrFunc为函数指针