清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 第4章函数和作用域
第4章 函数和作用域
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 4.1函数的定义和说明 1.函数的定义格式 〈类型〉〈函数名〉(〈参数表〉) 〈函数体〉 C++程序中函数的类型不可省略
4. 1 函数的定义和说明 1. 函数的定义格式 〈类型〉〈函数名〉(〈参数表〉) { 〈函数体〉 } C++程序中函数的类型不可省略
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 例如, void noting {} 2.函数的说明 个函数先调用而后定义时,调用前必须说明。 说明函数的方法如下: 〈类型〉〈函数名〉(〈参数个数和类型〉) C++程序中函数说明一律采用原理说明
例如, void noting( ) { } 2. 函数的说明 一个函数先调用而后定义时,调用前必须说明。 说明函数的方法如下: 〈类型〉〈函数名〉(〈参数个数和类型〉) C++程序中函数说明一律采用原理说明
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 4.2函数的调用 1.函数的传值调用 该调用(同C语言)又分如下两种。 (1)传值调用 实参用表达式,形参用变量名,实参将复制副本形参。在被 调用函数中形参的改变将不影响调用函数的实参。 (2)传址调用 实参用地址值,形参用指针,调用时将地址值传送给指针, 即让指针指向实参变量或对象。被调用函数中可以通过改 变形参所指向的值来改变实参
4. 2 函数的调用 1. 函数的传值调用 该调用(同C语言)又分如下两种。 (1) 传值调用 实参用表达式,形参用变量名,实参将复制副本形参。在被 调用函数中形参的改变将不影响调用函数的实参。 (2) 传址调用 实参用地址值,形参用指针,调用时将地址值传送给指针, 即让指针指向实参变量或对象。被调用函数中可以通过改 变形参所指向的值来改变实参
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 2.引用调用 引用调用时,实参用变量名或对象名,形参用变量或对象的 引用。实际传送的是地址值。在被调用函数中改变形参值, 则调用函数中实参值也被改变。引用调用具有传址调用的 特点,而在操作中又比传址调用方便、直观。因此,在 C++程序中多用引用调用。 参见[例43]、[例44]和[例45]
2. 引用调用 引用调用时,实参用变量名或对象名,形参用变量或对象的 引用。实际传送的是地址值。在被调用函数中改变形参值, 则调用函数中实参值也被改变。引用调用具有传址调用的 特点,而在操作中又比传址调用方便、直观。因此,在 C++程序中多用引用调用。 参见[例4. 3]、[例4. 4]和[例4. 5]
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 43函数参数 1.函数参数的求值顺序 应注意不同编译系统中,函数参数求值的顺序可能不同。因 此,在不同编译系统下,当实参表达式中出现有副作用的 运算符时,可能产生二义性。 2.设置函数参数的默认值 C++语言中,允许在定义或说明函数时设置函数形参的默认 值
4.3 函数参数 1. 函数参数的求值顺序 应注意不同编译系统中,函数参数求值的顺序可能不同。因 此,在不同编译系统下,当实参表达式中出现有副作用的 运算符时,可能产生二义性。 2. 设置函数参数的默认值 C++语言中,允许在定义或说明函数时设置函数形参的默认 值
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 具体规则如下: ①设置参数默认值时,要求从右向左设置 ②调用设置了默认参数的函数时,对应实参如果没有,则用 默认值,如果存在,则用实参值 ③如果一个函数有说明出现时,设置参数默认值应放在函数 说明中 参见[例47]、[例4.8 3.数组名可作为函数参数 参见[例411]
具体规则如下: ① 设置参数默认值时,要求从右向左设置 ② 调用设置了默认参数的函数时,对应实参如果没有,则用 默认值,如果存在,则用实参值 ③ 如果一个函数有说明出现时,设置参数默认值应放在函数 说明中 参见[例4.7]、[例4.8]。 3. 数组名可作为函数参数 参见[例4.11]
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 44内联函数 1.引进内联函数的目的是为了提高函数的执行效果。 2.内联函数的定义方法 在函数头前加关键字 inline,则该函数为内联函数。 参见[例412]。 3.使用内联函数应注意的事项 通常情况下是将一些函数体不大使用频繁的函数定义为内联 函数。 使用内联函数时应注意: ①内联函数体内不允许用循环语句和开关语句 ②内联函数的定义必须出现在第一次调用之前 ③类体内定义的所有成员函数都是内联函数
4.4 内联函数 1. 引进内联函数的目的是为了提高函数的执行效果。 2. 内联函数的定义方法 在函数头前加关键字inline,则该函数为内联函数。 参见[例4.12]。 3. 使用内联函数应注意的事项 通常情况下是将一些函数体不大使用频繁的函数定义为内联 函数。 使用内联函数时应注意: ① 内联函数体内不允许用循环语句和开关语句 ② 内联函数的定义必须出现在第一次调用之前 ③ 类体内定义的所有成员函数都是内联函数
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 45函数重载 1.什么是函数重载 函数重载是指同一个函数名对应着多个不同的实现。 2.定义重载函数时应注意什么 多个重载的同名函数在定义时要注意它们的参数的不同,主 要是参数个数不同、参数类型不同和参数顺序不同。 在选择重载函数的不同实现时,主要根据参数不同进行选择。 参见[例413]、[例414]
4.5 函数重载 1. 什么是函数重载 函数重载是指同一个函数名对应着多个不同的实现。 2. 定义重载函数时应注意什么 多个重载的同名函数在定义时要注意它们的参数的不同,主 要是参数个数不同、参数类型不同和参数顺序不同。 在选择重载函数的不同实现时,主要根据参数不同进行选择。 参见[例4.13]、[例4.14]
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 46函数的嵌套调用和递归调用 1.函数的嵌套调用 参见[例415]。 2.函数的递归调用 (1)递归调用的特点 (2)递归调用的执行过程 参见[例416]
4.6 函数的嵌套调用和递归调用 1. 函数的嵌套调用 参见[例4.15]。 2. 函数的递归调用 (1) 递归调用的特点 (2) 递归调用的执行过程 参见[例4.16]