C++基础入门详细笔记(三)

C++基础入门详细笔记(一)

C++基础入门详细笔记(二)

C++基础入门详细笔记(三)

C++基础入门详细笔记(四)

C++基础入门详细笔记(五)

C++基础入门详细笔记(六)

目录

五、函数

1、自定义函数完整写法

2、函数指针

2.1、函数指针的申明


五、函数

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为函数指针
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值