C++入门教程(12):定义函数

小古银的官方网站(完整教程):http://www.xiaoguyin.com/
C++入门教程视频:https://www.bilibili.com/vide...ios


既然用过std::abs()函数,那么,如今就以它为例,实现一个myabs()函数来实现求绝对值。ide

返回值类型 函数名称(参数类型 参数名称, 参数类型 参数名称)
{
    函数的内容
}

基础示例

根据这个格式实现myabs()函数:函数

#include <iostream>

int myabs(int num)
{
    int value = 0;
    if (num < 0)
    {
        value = -num;
    }
    else
    {
        value = num;
    }
    return value;
}

int main(void)
{
    std::cout << myabs(-1024) << std::endl;
    std::cout << myabs(2333) << std::endl;
    std::cout << myabs(6666) << std::endl;
    return 0;
}

输出结果:网站

1024
2333
6666

基础讲解

先看一下调用myabs()的时候跟调用std::abs()函数时是同样的。设计

而后再看看定义:code

int myabs(int num)
{
    int value = 0;
    if (num < 0)
    {
        value = -num;
    }
    else
    {
        value = num;
    }
    return value;
}

myabs是函数的名称,myabs前面是返回值的类型,后面括号内是函数的参数,num是须要转成绝对值的值,它只接受int类型,因此调用就能够这样:视频

int absnum = myabs(-100);

上面代码中,函数参数num叫作形式参数;而传进去的参数-100叫作实际参数教程

形式参数其实是一个局部变量,它的做用域就是在myabs()函数内。假设传入一个数值,上面代码函数的形式参数的行为是:int num = 100;,而后执行函数内的代码;假设传入一个变量value,那么形式参数的行为就是:int num = value;。也就是说,当有参数传入函数时,传入参数的行为就是一个赋值行为。因此,若是一个参数占用内存比较大,那就会致使大量数据被复制。内存

如下代码判断,若是num小于0就给它一个负号让它变成正数,而后再赋值给value;若是num非负则直接赋值给value作用域

int value = 0;
if (num < 0)
{
    value = -num;
}
else
{
    value = num;
}

而后,myabs()函数返回计算结果,也就是变量value

return value;

固然啦,为了方便分析我作了一些拆分,实际上,myabs()函数能够简写成这样:

int myabs(int num)
{
    if (num < 0)
    {
        return -num;
    }
    else
    {
        return num;
    }
}

由于newnumint类型,因此返回值我就决定是int类型了。若是你以为返回值确定是非负的,那么你也是对的。因此,myabs()函数也能够写成这样:

unsigned int myabs(int num)
{
    if (num < 0)
    {
        return -num;
    }
    else
    {
        return num;
    }
}

再放一个含有多个参数的函数的栗子:

#include <iostream>

int add(int a, int b)
{
    return a + b;
}

int main(void)
{
    std::cout << add(-5, 100) << std::endl;
    return 0;
}

固然啦,单纯地相加就不必写成函数了。

补充知识

在C++11前,为了减小函数返回值的额外开销,通常将非基本数据类型的类型(例如std::string)经过参数来返回。C++11开始,返回值直接返回不会带来额外的开销。由于返回变量时,编译器并不会销毁局部变量的内存并且还会将内存地址直接传递给保存返回值的变量。因为这个转变,使C++设计出来的函数更加直观地表达出其意义。而这个机制就叫作完美转发

相关文章
相关标签/搜索