第01讲 函数和函数模版  

3.1 函数的参数及其传递方式

  C语言中参数传递方式只有一种:值传递
  值传递分为:变量值传递和变量地址值传递
  C++中分为:值传递和地址传递(引用传递)
  第三章 函数和函数模版 - 图1
  要注意区分:
  参数传递中传地址和传地址值不同。
  设计函数时要注意:
  对象作参数,对象指针作参数,对象引用作参数

3.1.1 对象作函数参数

  作用同C语言中普通变量作参数
  第三章 函数和函数模版 - 图2
  第三章 函数和函数模版 - 图3

3.1.2 对象指针作函数参数

  作用同C语言中变量指针作参数
  第三章 函数和函数模版 - 图4

3.1.3 引用作为函数参数

  引用的声明形式:
  数据类型 &别名=对象名;
  int x=56;
  int &a=x;
  int &b=a;
  则a为x变量(对象)的引用,a和x对应同一个内存空间。a未单独分配内存。b为a的引用。
  引用的声明形式:
  数据类型 &别名=对象名;
  int x=56;
  int &a=x;
  int &b=a; b=10;
  则a为x变量(对象)的引用,a和x对应同一个内存空间。a未单独分配内存。b为a的引用。
  程序中引用对象的改变会使得被引用对象发生改变。
  引用作函数参数:
  类型 函数名(类型 &参数,……)
  函数调用时,实参对象名传递给形参对象名,形参对象名成为实参的别名,函数中对形参的改变就会导致实参值的改变。
  引用作函数参数:
  类型 函数名(类型 &参数,……)
  第三章 函数和函数模版 - 图5
  引用作函数参数 说明:
  1,引用对象不是一个独立对象,不占用内存。
  2,对象的指针作参数时,指针变量中存放实参对象的地址。
  3,引用对象作参数时,函数调用时形参对象和实参对象共用一个内存单元。
  第三章 函数和函数模版 - 图6
  引用数组名作参数
  第三章 函数和函数模版 - 图7
  一般格式:typedef 类型 类型别名
  使用typedef定义某类型别名后,可使用该别名来定义相关对象。
  例如:typedef long int lint;
  则 long int i ; 等价于 lint i ;
  Typedef使用说明
  第三章 函数和函数模版 - 图8
  typedef用法总结:建立一个类型别名的方法很简单,在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头
  第三章 函数和函数模版 - 图9

3.1.4 默认参数

  函数调用时,可以为函数指定实参,也可不指定实参,未指定实参时,函数自动取默认值。
  第三章 函数和函数模版 - 图10
  注意:
  若函数第n个参数是默认参数,当调用函数需要指定该参数值时,则该参数前的所有参数都必须指定。

3.1.5 使用const保护数据

  const限定参数值不可修改

3.2 深入讨论函数的返回值

3.2.1 返回引用的函数

  第三章 函数和函数模版 - 图11

3.2.2 返回指针的函数

  第三章 函数和函数模版 - 图12
  第三章 函数和函数模版 - 图13

3.2.3 返回对象的函数

  第三章 函数和函数模版 - 图14
  3.2.2 返回指针的函数—补充
  说明:new语句
     delete语句
     NULL
  New格式: 指针变量 = new 类型[n]
  Delete格式: delete 指针变量
  NULL表示空
  第三章 函数和函数模版 - 图15
  3.2.3 返回对象的函数
  第三章 函数和函数模版 - 图16

3.2.4 返回值作为函数参数

3.3 内联函数

  定义函数时,加inline关键字表示该函数为内联函数。
  第三章 函数和函数模版 - 图17
  程序中的内联函数在程序编译时,将函数体替换至程序中函数调用位置,造成程序变长,效率提高。
  注意:内联函数中不能出现循环、switch语句内联函数一般短小,不宜过长应在调用之前声明或定义

3.4 函数重载和默认参数

  同一个函数名实现多种功能,在C++中称为多态,可利用函数重载和默认参数两种方式实现
  第三章 函数和函数模版 - 图18
  第三章 函数和函数模版 - 图19
  同一个函数名实现多种功能,在C++中称为多态,可利用函数重载和默认参数两种方式实现
  第三章 函数和函数模版 - 图20
  定义或声明函数时,给出参数初始化值,则函数调用时若省略参数,则参数取该初始化值。称为默认参数。
  同一个函数名实现多种功能,在C++中称为多态,可利用函数重载和默认参数两种方式实现
  注意:
  函数重载和默认参数可同时使用。
  若已定义默认参数函数,则不能重载参数类型相同,参数个数少于默认参数个数的函数。
  同一个函数名实现多种功能,在C++中称为多态,可利用函数重载和默认参数两种方式实现
  注意:
  函数重载和默认参数可同时使用。
  若已定义默认参数函数,则不能重载参数类型相同,参数个数少于默认参数个数的函数。参数类型不同时,可以重载。
  第三章 函数和函数模版 - 图21

3.5 函数模板

  有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。
  第三章 函数和函数模版 - 图22
  有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。
  第三章 函数和函数模版 - 图23
  有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。
  第三章 函数和函数模版 - 图24
  有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。
  第三章 函数和函数模版 - 图25
  函数模板定义格式:
  定义函数模板后,函数调用时根据函数参数来类型来确定调用哪个版本的函数。函数执行时确定参数类型的函数称为模板函数。
  第三章 函数和函数模版 - 图26
  此种形式调用中称为函数模板的参数
  一般可省略。Typename可替代class
  若某函数参数类型不一致时,也可定义函数模板。
  第三章 函数和函数模版 - 图27