C++中级篇(2)——函数与函数模板

    xiaoxiao2023-03-24  4

    引言:

                   函数——实现某一个数据处理操作的功能单元。

    概述:

                   C++的函数相比较面向对象的函数来说是比较复杂的,C++中的函数就相当于面向对象中我们写的方法。接下来学习一下C++中的函数,以及函数的一个抽象——函数模板。

    内容:

                  一  函数

                  1 函数参数

                       1C++的函数参数传递方式有俩种:传值和传引用。                             

                                     1)传值:分为传变量值和传变量地址值。                                  2)传引用:传对象的地址。                                  注意:1 传地址值传递的是值,不是地址;传地址传的是地址不是地址值。                                             2 传递对象地址值是使用对象指针作为参数;传递地址是使用对象引用作为参数。                        (2)函数参数类型                                                             1)对象:将实参对象的值传递给形参对象,这种传递是单向的,形参拥有实参的备份。                                       特点:<1> 在函数中改变形参的值,改变的是备份的值不会影响实参的值,防止被调用函数改变参数的原始值。                                                 <2> 不能讲数组的值作为函数参数,但可以将数组的地址值作为参数,即使用指针作为参数。                                 2)对象指针:将指向对象的指针作为函数参数,形参是对象指针,实参是对象的地址值。                                      特点:<1> 参数传递方式为传值方式                                                  <2> 改变形参的值就是改变实参的值                                                 <3> 采用传对象地址方式,要用到对象的指针,能提高运行效率                                           注意:数组名就是数组的指针名,数组可用传数组地址值的方式。                                 3)对象引用:实参对象名传给形参对象名,形参对象名就成为实参对象名的别                                      特点: <1> 实参对象和形参对象代表同一个对象,改变形参就是改变实参                                                 <2> 实际是把实参对象的地址传给形参对象,形参对象和实参对象共享同一个单元,即为地址传递方式。                                                  <3> 引用对象不是独立的对象,不单独占用内存单元,但是对象指针需要另外开辟内存单元,所以传引用比传指针更好。                                           注意:系统向形参传递的是实参的地址而不是实参的值,但实参必须使用对象名。                                4)默认形式:不要求程序员设定该参数,由编译器在需要时给该参数赋默认值                                      特点:<1> 默认参数是在函数原型中说明的,默认参数可以多于1个,但必须放在参数序列的后部                                                 int SaveName(char *first, char *second=" ",char *third=" ",char *fourth=" ");默认参数second、third、fourth必须放在参数序列first后面。这种方式表明,若不给出参数second、third、fourth的值,则取默认值空格。                                               <2> 如果一个默认参数需要指明一个特定值,则在其之前的所有参数都必须赋值。即要指明third为特定值,first和second必须赋值。                                           注意:const使用限制:const修饰传递参数表明函数只能使用该参数而不能修改。                              

                  2 函数返回值                   

                             C++函数返回值类型可以是除数组和函数以为的任何类型,非void类型的函数必须向调用者返回一个值。数组只能返回地址。                         (1) 返回值类型                                1)引用:数据类型 & 函数名 (参数列表);将函数用在赋值运算符的左边。                                2)指针:类型标识符 * 函数名 (参数列表);函数返回值为存储某种类型数据的内存地址,称之为指针函数。                                3)对象:对象类型 函数名(参数列表);和基本函数差不多,只是返回类型为对象类型。                                注意:当函数返回值为指针或引用对象时,函数返回所指的对象必须继续存在,因此不能将函数内部的局部对象作为函数的返回值,应该使用全局对象。                         (2) 函数返回值作为函数的参数                                函数返回值必须与新函数的参数的类型一致。

                  3 特殊函数

                       (1)内联函数                            

                                   1) 是什么?                                      用inline关键字修饰的函数。                                2) 为什么?                                     使用内联函数能加快程序执行速度。                                3)怎么用?                                     <1> 除具有循环语句、switch语句的函数不能说明说明为内联函数,其他函数都可以。                                     <2> 函数体语句多,会增加程序代码的大小,一般不用内联函数。                                    <3> 内联函数必须在程序中第一次调用此函数的语句出现之前进行定义。

                          (2)友元函数

    1)是什么?

    不是类成员却能访问类的所有成员的函数。

    2)为什么?

    在实现类之间数据共享时,减少系统开销,提高效率。为什么提出友元函数,依据定义而来,为了使其他类的成员函数直接访问该类的私有变量,即允许外面的类或函数去访问类的私有变量和保护变量,从而使俩个类共享同一函数。

    3)怎么用?

    运算符重载的某些场合需要使用友元函数。

    俩个了类要共享数据的时候。

    4)扩展:下面的链接,详细介绍了友元函数的一些知识。

    http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/04/2535305.html

                  4 函数重载                  

                           (1) 是什么?                                   函数重载是函数的一种特殊情况,可以是一个函数名具有多种功能,即具有多态性,函数的静态联编使用的就是函数重载,也叫做静态多态性。                        (2) 为什么?                                   顾名思义,为了使同名函数具备不同功能。                        (3) 怎么用?                                   使用要求:1)函数名相同                                                     2)参数类型不同或参数个数不同                                   注意:函数返回值不同不能区分重载函数。

                  二 函数模板             

                     1 为什么引入:                        为了解决程序文本一样,逻辑功能相同,只是数据类型不同的函数的使用。                  2 怎么用:                      (1)函数模板实例化:函数模板与某个具体数据类型连用,产生模板函数的过程。                      (2)函数模板的参数:                                 显式比较方式:函数模板名 <模板参数> (参数列表)                                 默认方式:        函数模板名 (参数列表)                     (3)显式规则和关键字typename     

    总结:

                   重点理解函数参数以及返回值为引用还是指针,二者之间的区别于联系,在程序中又是如何体现的,同事也要掌握内联和友元函数的用法,以及函数模版的用法。

    转载请注明原文地址: https://ju.6miu.com/read-1202827.html
    最新回复(0)