第七章 函数

来源:互联网 发布:动圈话筒知乎 编辑:程序博客网 时间:2024/05/16 00:36

函数可以看作程序员定义的操作。与内置操作符相同的是,每个函数都会实现一系列的计算,然后(大多数时候)生成一个计算结果。但与操作符不同的是,函数有自己的函数名,而且操作数没有数量限制。与操作符一样,函数可以重载,这意味着同样的函数名可以对应多个不同的函数。


1.形参和实参:

    1.函数的形参定义了函数的参数的类型和存储空间。

    2.函数的实参是赋给形参的具体的初始化值。

2.函数不能返回另一个函数或者内置数组类型,但可以返回指向函数的指针,或指向数组元素的指针的指针。

3.每次调用函数时,都会重新创建该函数所有的形参,此时所传递的实参将会初始化对应的形参。

4.普通的非引用类型的参数通过复制对应的实参实现初始化。当用实参副本初始化形参时,函数并没有访问调用所传递的实参本身,因此不会修改实参的值。

5.复制实参并不是在所有的情况下都适合,不适宜复制实参的情况包括:

    1.当需要在函数中修改实参的值时。

    2.当需要以大型对象作为实参传递时,复制对象所付出代价过高。

    3.当没有办法实现对象的复制时。

6.与所有引用一样,引用形参直接关联到其所绑定的对象,而并非这些对象的副本。

7.使用 const 引用就可避免修改实参。

8.通常,函数不应该有 vector 或其他标准库容器类型的形参。调用含有普通的非引用 vector 形参的函数将会复制 vector 的每一个元素。

9.通过传递数组第一个元素的指针来传递数组形参。

10.编译器忽略为任何数组形参指定的长度。

11.通过引用传递数组:

    和其他类型一样,数组形参可声明为数组的引用。如果形参是数组的引用,编译器不会将数组实参转化为指针,而是传递数组的引用本身。在这种情况下,数组大小成为形参和实参类型的一部分。编译器检查数组的实参的大小与形参的大小是否匹配。

12.千万不要返回局部对象的引用和指针。

13.直接或间接调用自己的函数称为递归函数。

14.正如变量必须先声明后使用一样,函数也必须在被调用之前先声明。与变量的定义类似,函数的声明也可以和函数的定义分离;一个函数只能定义一次,但是可声明多次。

15.C++允许默认实参,默认实参可以是任何适当类型的表达式。

16.自动对象:

    默认情况下,局部变量的生命期局限于所在函数的每次执行期间。只有当定义它的函数被调用时才存在的对象称为自动对象。自动对象在每次调用函数时创建和撤销。

17.静态局部对象:

    一个变量如果位于函数的作用域内,但生命期跨越了这个函数的多次调用,这种变量往往很有用。则应该将这样的对象定义为 static(静态的)。

18.内联函数:

    1.inline 函数避免函数调用的开销。

    2.把 inline 函数放入头文件。

19.成员函数:

    1.每个成员函数(除了 static 成员函数外)都有一个额外的、隐含的形参 this。

20.const 成员函数,称为称为(常量成员函数),const 成员函数只能做读处理。

21.const 对象、指向 const 对象的指针或引用只能用于调用其const 成员函数,如果尝试用它们来调用非 const 成员函数,则是错误的。

22.在冒号和花括号之间的代码称为构造函数的初始化列表。(Sales_item(): units_sold(0), revenue(0.0) { })

23.如果没有为一个类显式定义任何构造函数,编译器将自动为这个类生成默认构造函数。

24.通常将类的声明放置在头文件中。大多数情况下,在类外定义的成员函数则置于源文件中。

25.重载函数:

    1.出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数。


原创粉丝点击