1. 函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。
  2. 可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。
  3. 函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。
  4. C++ 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置。
  5. 函数还有很多叫法,比如方法、子例程或程序,等等。
  1. C++ 中的函数定义的一般形式如下:
  2. return_type function_name( parameter list )
  3. {
  4. body of the function
  5. }
  6. C++ 中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:
  7. 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void
  8. 函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
  9. 参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
  10. 函数主体:函数主体包含一组定义函数执行任务的语句。
  1. 以下是 max() 函数的源代码。该函数有两个参数 num1 num2,会返回这两个数中较大的那个数:
  2. // 函数返回两个数中较大的那个数
  3.  
  4. int max(int num1, int num2)
  5. {
  6. // 局部变量声明
  7. int result;
  8.  
  9. if (num1 > num2)
  10. result = num1;
  11. else
  12. result = num2;
  13.  
  14. return result;
  15. }
  1. 函数声明包括以下几个部分:
  2. return_type function_name( parameter list );
  3. 针对上面定义的函数 max(),以下是函数声明:
  4. int max(int num1, int num2);
  5. 在函数声明中,参数的名称并不重要,只有参数的类型是必需的,因此下面也是有效的声明:
  6. int max(int, int);
  7. 当在一个源文件中定义函数且在另一个文件中调用函数时,函数声明是必需的。在这种情况下,应该在调用函数的文件顶部声明函数。
  1. 创建 C++ 函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。
  2. 当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。
  3. 调用函数时,传递所需参数,如果函数返回一个值,则可以存储返回值。例如:
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. // 函数声明
  8. int max(int num1, int num2);
  9.  
  10. int main ()
  11. {
  12. // 局部变量声明
  13. int a = ;
  14. int b = ;
  15. int ret;
  16.  
  17. // 调用函数来获取最大值
  18. ret = max(a, b);
  19.  
  20. cout << "Max value is : " << ret << endl;
  21.  
  22. return ;
  23. }
  24.  
  25. // 函数返回两个数中较大的那个数
  26. int max(int num1, int num2)
  27. {
  28. // 局部变量声明
  29. int result;
  30.  
  31. if (num1 > num2)
  32. result = num1;
  33. else
  34. result = num2;
  35.  
  36. return result;
  37. }
  38. max() 函数和 main() 函数放一块,编译源代码。当运行最后的可执行文件时,会产生下列结果:
  39. Max value is :
  1. 如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的形式参数。
  2. 形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁。
  3. 当调用函数时,有三种向函数传递参数的方式:
  4. 传值调用 该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。
  5. 指针调用 该方法把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
  6. 引用调用 该方法把参数的引用复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
  7. 默认情况下,C++ 使用传值调用来传递参数。一般来说,这意味着函数内的代码不能改变用于调用函数的参数。之前提到的实例,调用 max() 函数时,使用了相同的方法。
  1. 参数的默认值
  2. 当定义一个函数,您可以为参数列表中后边的每一个参数指定默认值。当调用函数时,如果实际参数的值留空,则使用这个默认值。
  3. 这是通过在函数定义中使用赋值运算符来为参数赋值的。调用函数时,如果未传递参数的值,则会使用默认值,如果指定了值,则会忽略默认值,使用传递的值。请看下面的实例:
  4.  
  5. int main ()
  6. {
  7. // 局部变量声明
  8. int a = ;
  9. int b = ;
  10. int result;
  11.  
  12. // 调用函数来添加值
  13. result = sum(a, b);
  14. cout << "Total value is :" << result << endl;
  15.  
  16. // 再次调用函数
  17. result = sum(a);
  18. cout << "Total value is :" << result << endl;
  19.  
  20. return ;
  21. }
  22. 当上面的代码被编译和执行时,它会产生下列结果:
  23. Total value is :
  24. Total value is :
  1. Lambda 函数与表达式
  2. C++ 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。
  3. Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。
  4. Lambda 表达式本质上与函数声明非常类似。Lambda 表达式具体形式如下:
  5. [capture](parameters)->return-type{body}
  6. [](int x, int y){ return x < y ; }
  7. 如果没有返回值可以表示为:
  8. [capture](parameters){body}
  9. []{ ++global_x; }
  10. 在一个更为复杂的例子中,返回类型可以被明确的指定如下:
  11. [](int x, int y) -> int { int z = x + y; return z + x; }
  1. C++变量传递有传值和传引用的区别。可以通过前面的[]来指定:
  2. [] // 沒有定义任何变量。使用未定义变量会引发错误。
  3. [x, &y] // x以传值方式传入(默认),y以引用方式传入。
  4. [&] // 任何被使用到的外部变量都隐式地以引用方式加以引用。
  5. [=] // 任何被使用到的外部变量都隐式地以传值方式加以引用。
  6. [&, x] // x显式地以传值方式加以引用。其余变量以引用方式加以引用。
  7. [=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。
  8. 另外有一点需要注意。对于[=]或[&]的形式,lambda 表达式可以直接使用 this 指针。但是,对于[]的形式,如果要使用 this 指针,必须显式传入:
  9.  
  10. [this]() { this->someFunc(); }();

吴裕雄--天生自然C++语言学习笔记:C++ 函数的更多相关文章

  1. 吴裕雄--天生自然C++语言学习笔记:C++ 标准库

    C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...

  2. 吴裕雄--天生自然C++语言学习笔记:C++ 动态内存

    栈:在函数内部声明的所有变量都将占用栈内存. 堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存. 可以使用特殊的运算符为给定类型的变量在运行时分配堆内的内存,这会返回所分配的空间地址.这种运 ...

  3. 吴裕雄--天生自然C++语言学习笔记:C++ 类 & 对象

    C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计.类是 C++ 的核心特性,通常被称为用户定义的类型. 类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法.类中的 ...

  4. 吴裕雄--天生自然C++语言学习笔记:C++ 日期 & 时间

    C++ 标准库没有提供所谓的日期类型.C++ 继承了 C 语言用于日期和时间操作的结构和函数.为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 <ctime> 头文件. 有四 ...

  5. 吴裕雄--天生自然C++语言学习笔记:C++ 字符串

    C++ 提供了以下两种类型的字符串表示形式: C 风格字符串 C++ 引入的 string 类类型 C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持.字符串实际上是使用 null 字符 ...

  6. 吴裕雄--天生自然C++语言学习笔记:C++ 基本语法

    C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互. 对象 - 对象具有状态和行为.例如:一只狗的状态 - 颜色.名称.品种,行为 - 摇动.叫唤.吃.对象是类的实例. 类 - 类可 ...

  7. 吴裕雄--天生自然C++语言学习笔记:C++简介

    C++ 是一种中级语言,它是由 Bjarne Stroustrup 于 年在贝尔实验室开始设计开发的.C++ 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言.C++ 可运行于多种平台上,如 ...

  8. 吴裕雄--天生自然C++语言学习笔记:C++ 实例

    C++ 实例 - 输出 "Hello, World!" #include <iostream> using namespace std; int main() { co ...

  9. 吴裕雄--天生自然C++语言学习笔记:C++ STL 教程

    C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量.链表.队列.栈. C++ 标准模板库的核心包括以 ...

  10. 吴裕雄--天生自然C++语言学习笔记:C++ Web 编程

    什么是 CGI? 公共网关接口(CGI),是一套标准,定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的. CGI 规范目前是由 NCSA 维护的,NCSA 定义 CGI 如下: 公共网关接 ...

随机推荐

  1. rendering path定义了什么?有哪些?有什么作用?有什么限制?

    rendering path 定义了光照在一个shader pass中处理的对象与顺序,如逐像素处理,逐顶点处理,向前处理,后向 deferred用于处理不透明物体,会先把它们根据深度检测,过滤后的内 ...

  2. 在webView中除去广告

    首先建一个ADFilterTool.java类 代码如下 import android.content.Context; import android.content.res.Resources; p ...

  3. eclipse安装SVN插件的两种方法

    eclipse里安装SVN插件,一般来说,有两种方式: 直接下载SVN插件,将其解压到eclipse的对应目录里 使用eclipse 里Help菜单的“Install New Software”,通过 ...

  4. JDBC--批量处理

    1.当需要成批插入或者更新记录时,可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理,这样可以提高处理速度. 2.JDBC的批量处理语句包括两个方法: --1)addBat ...

  5. 搞懂G1垃圾收集器

    一.G1 GC术语Overview 1.1 并发 并发的意思是Java应用执行和垃圾收集活动可以同时进行 1.2 并行 并行的意思是垃圾收集运算是多线程执行的,比如CMS垃圾收集器的年轻代就是并行的, ...

  6. Java得到一个整数的绝对值,不使用任何判断和比较语句,包括API.

    /** * Java得到一个整数的绝对值,不使用任何判断和比较语句,包括API. <br> * 1.不得使用任何API,如Math.abs()等.<br> * 2.不得使用判断 ...

  7. hadoop 第一个 mapreduce 程序(对MapReduce的几种固定代码的理解)

    1.2MapReduce 和 HDFS 是如何工作的 MapReduce 其实是两部分,先是 Map 过程,然后是 Reduce 过程.从词频计算来说,假设某个文件块里的一行文字是”Thisis a ...

  8. mysql文件理解

    mysql_Innodb的undo_log和redo_log 原创 2014年10月28日 11:26:34   众所周知,mysql支持多种存储引擎,现在常用的是MyISAM和InnoDB.MyIS ...

  9. 初级入门 --- web GL绘制点

    " 万丈高楼平地起." 01基础知识 一.相关术语 图元 :WebGL 能够绘制的基本图形元素,包含三种:点.线段.三角形. 片元:可以理解为像素,像素着色阶段是在片元着色器中. ...

  10. metasploit扫描

    实验目的: 一.  基于TCP协议收集主机信息 二.  基于SNMP协议收集主机信息 三.  基于SMB协议收集信息 四.  基于SSH协议收集信息 五.  基于FTP协议收集信息     实验环境: ...