美文网首页C++入门教程
C++入门教程(12):定义函数

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

作者: 小古银 | 来源:发表于2018-04-18 16:24 被阅读0次

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


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

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

基础示例

根据这个格式实现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()函数时是一样的。

然后再看看定义:

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++设计出来的函数更加直观地表达出其意义。而这个机制就叫做完美转发

相关文章

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

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

  • #C++ Primer Plus# 第二章 开始学习C++

    2.1 进入C++ 2.1.1 main() 函数 函数定义(function definition)= 函数头(...

  • C++Primer之 函数探幽

    读C++ primer总结 C++函数包括函数声明和函数定义,函数声明即函数原型,一般隐藏在include文件中。...

  • [C++之旅] 12 拷贝构造函数

    [C++之旅] 12 拷贝构造函数 拷贝构造函数的特点 如果没有自定义的拷贝构造函数则系统自动生成一个默认的拷贝构...

  • [初学C++]构造和析构函数

    什么是构造函数定义C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数.C++对类提...

  • c++primer这本书

    c++不允许将一个函数的定义嵌套在另一个函数定义中,每个函数都是平等创建,都应位于主函数main后。在c++的等级...

  • C++函数初识

    Tags:C++,《C++ Primer Plus》笔记 一、原型、定义与调用## 一个完整的函数包含原型、定义和...

  • C++基础构造函数(constructor)

    构造函数定义 C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数,构造函数在定义时...

  • c++面向对象

    c++定义类 成员和成员函数 成员函数可以在内部定义,也可在内部声明,外部定义。 类的构造函数(有默认): 在类...

  • C++ 函数

    1、定义函数 C++ 中的函数定义的一般形式如下: return_type function_name( para...

网友评论

    本文标题:C++入门教程(12):定义函数

    本文链接:https://www.haomeiwen.com/subject/hytbkftx.html