TreeMind树图在线AI思维导图
当前位置:树图思维导图模板高校与高等教育高等数学自定义函数与封装思维导图

自定义函数与封装思维导图

  收藏
  分享
免费下载
免费使用文件
U428052273 浏览量:682023-03-08 22:26:49
已被使用9次
查看详情自定义函数与封装思维导图

自定义函数与封装

树图思维导图提供 自定义函数与封装 在线思维导图免费制作,点击“编辑”按钮,可对 自定义函数与封装  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:6478108aec1ed8143a8410a13a460283

思维导图大纲

自定义函数与封装思维导图模板大纲

函数与结构化程序设计

主函数相当于总调度,用来控制流程机构(顺序、选择、循环),调用各个函数(标准库函数、用户自定义函数等)实现具体的功能。

函数是程序设计的基本单位,是对一个问题的抽象,一般只包含一个独立的功能。

自定义函数包括3个部分:

函数原型声明(一般在主函数定义的前面)

函数调用(在主函数或其他自定义函数中的函数调用语句)

函数定义(一般在主函数定义的后面)

函数的参数传递

参数的值传递

方式

值传递、址传递(C语言)

值传递、址传递、引用传递(C++)

址传递(C$C++特有)

参数的值传递

形参变量单向接收实参的值,形参变量的任何修改都不会影响实参的值。

参数的值传递增强了函数的独立性,避免了调用函数时对主调函数内部变量值的修改。

C++的引用传递

引用型变量在定义时必须初始化。

优点

函数在调用时定义形参变量为实参变量的别名,形参与实参在函数内部操作同一块内存空间,免去了内存空间的分配以及赋值的过程,提高了效率。

改变形参的值就是修改实参的值,因此可以快速实现主调函数与被调用函数之间的信息传递。

引用传递语法简单,效率高。

const修饰引用形参

变量的作用域与生存期

局部变量的作用域与生存期

局部变量(local variable):在函数、语句等代码块中声明的变量。

局部变量的作用域(scope)是从声明开始直到所属代码块结束。

局部变量存储在栈内存中,当变量所属的代码块(函数、语句)执行完毕后,变量的内存被操作系统自动回收。

全局变量的作用域与生存期

全局变量(global variable):在函数外部声明的变量。

作用域是从变量声明直到程序结束。

全局变量存储在全局数据区中,当程序执行结束后回收内存。

全局变量一般声明在文件头部,方便使用;但破坏了函数的封装性,因此在特殊情况下使用。

静态变量的作用域与生存期

函数内部的局部变量在每次被调用时获得 内存,调用结束时释放内存。如果下次调 用时希望保留上一次的局部变量的值,要用关键字 static 将局部变量定义为静态变量 (static variable)。

静态变量存储在全局数据区 中,在声明时必须初始化,函数调用结束后 不会回收内存,下次调用时直接使用变量(初始化只在第一次调用时执行一次),当程序执行结束后回收内存。

既保存变量的作用域不变(保证函数的发展性),又延长变量的生存周期到程序结束。

自定义函数

函数声明

一种原型声明,不包含任何代码。只是声明函数定义中的函数名称、函数返回值的数据类型以及函数参数的类型。

函数声明语句一般与函数定义头部完全相同,末尾增加一个分号。

函数定义

定义格式与main函数的定义格式相同,一般为:返回类型 函数名称(形式参数列表) { 函数体;}

包括两部分:函数头和函数体

函数头

返回类型、函数名称、形式参数列表(不以分号结尾)

函数体

一条复合语句。由一对大括号括起0或若干条语句。

函数需要返回值时,至少包含一条return语句;不需要时,返回类型为空(void),不需要return语句,或者写成return ;

函数返回值

使用关键字return从函数返回一个值,可以是常量、变量、表达式或调用函数的返回值,也可以是空语句。

陷阱:函数声明与定义的常见问题

函数声明与定义中的常见错误

形参变量与局部变量重名问题

语句块的变量定义问题

函数的调用

一个函数被使用。函数调用前必须有函数声明。

函数调用的格式: 函数名称(实际参数)

调用函数时,函数名称右边的()不能省略。

调用语法

无参函数:“函数名()”

有参函数:”函数名(实参列表)“

实参(必须是确切的值):变量、常量、表达式、函数调用等。

陷阱:函数调用的常见问题

常见错误

用途

可以用于在合适的表达式中参与计算。

可以作为另一个函数调用的实参。

可以用在输入语句中,直接输出结果。

可以用在流程控制语句中,控制程序的执行。

函数的嵌套调用:在函数定义内部允许调用另一个函数。

函数的调用过程

参数传递:将实参值赋给形参变量。

执行函数体的语句。

返回函数调用表达式的位置。

C++的函数重载与默认参数

C++的函数重载

函数的签名

在函数声明中,函数名称、参数类型及其排列顺序构成了函数的签名

函数签名几种情况

函数的数据类型不同

参数的个数不同

参数的数据类型和个数都不同

陷阱:函数重载的调用失败问题

需要注意,由于同一个函数名有多个函 数签名,调用时会根据实参的数据类型或个数选择完全匹配的那个函数。

如果没有找到完 全匹配的数据类型,会自动进行类型转换后再次寻找匹的函数。如果类型转换后仍然找不到匹配的函数,会出现编译错误,提示信息如: TError] no matching function for call to'具体的函数声明"

如果函数调用时发现有多个函数可以匹配,就会出现混淆,系统不知道该调用哪个函数,也会出现编译错误,提示信息如下: [Error] call of overloaded '具体的函类数声明,is ambiguous

C++的默认参数

一般形式:返回数据类型 函数名称(形参1=默认值1,形参2=默认值2,...);

函数声明与调用举例

函数原型声明 函数调用举例及说明 int fun(int a, int b, int c); int n = fun(1, 2,3);无默认参数,实参必须有3个 int fun(int a=1,int b=2,int c=3); intn =fun(1,2,3); a的值是1,b的值是2,c的值是3 intn =fun(1,2); a的值是1,b的值是2,c的值是1 intn =fun(5); a的值是5,b的值是2,c的值是3 intn =fun(); a的值是1,b的值是2,c的值是3

递归思想——递归函数

递归函数

在函数定义中直接或间接调用自身的函数。

定义的一般形式:返回类型 函数名(形成列表) { if(条件) return值;... 包含调用自身的语句 ... }

调用过程

递归函数的调用过程很复杂,要经历多次函数调用、返回的过程,每次调用都要记住函数名(在内存中保存函数名,函数名是一个地址值)、分配形参变量、接收实参的值等,内存消耗比较大。如果没有递归截止的条件,函数会不断调用自身最终会耗尽内存,导致程序异常结束。

递归调用中的栈

栈是一种数据结构,具有后进先出的特点。

相关思维导图模板

经验与教训思维导图

树图思维导图提供 经验与教训 在线思维导图免费制作,点击“编辑”按钮,可对 经验与教训  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:77a0c80d028e75ba247385489d0f5835

创意构思的重要性思维导图

树图思维导图提供 创意构思的重要性 在线思维导图免费制作,点击“编辑”按钮,可对 创意构思的重要性  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:2ae447afb1f178fa80694de96db85d5d