第01讲 函数和函数模版
3.1 函数的参数及其传递方式
C语言中参数传递方式只有一种:值传递
值传递分为:变量值传递和变量地址值传递
C++中分为:值传递和地址传递(引用传递)
要注意区分:
参数传递中传地址和传地址值不同。
设计函数时要注意:
对象作参数,对象指针作参数,对象引用作参数
3.1.1 对象作函数参数
3.1.2 对象指针作函数参数
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的引用。
程序中引用对象的改变会使得被引用对象发生改变。
引用作函数参数:
类型 函数名(类型 &参数,……)
函数调用时,实参对象名传递给形参对象名,形参对象名成为实参的别名,函数中对形参的改变就会导致实参值的改变。
引用作函数参数:
类型 函数名(类型 &参数,……)
引用作函数参数 说明:
1,引用对象不是一个独立对象,不占用内存。
2,对象的指针作参数时,指针变量中存放实参对象的地址。
3,引用对象作参数时,函数调用时形参对象和实参对象共用一个内存单元。
引用数组名作参数
一般格式:typedef 类型 类型别名
使用typedef定义某类型别名后,可使用该别名来定义相关对象。
例如:typedef long int lint;
则 long int i ; 等价于 lint i ;
Typedef使用说明
typedef用法总结:建立一个类型别名的方法很简单,在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头
3.1.4 默认参数
函数调用时,可以为函数指定实参,也可不指定实参,未指定实参时,函数自动取默认值。
注意:
若函数第n个参数是默认参数,当调用函数需要指定该参数值时,则该参数前的所有参数都必须指定。
3.1.5 使用const保护数据
3.2 深入讨论函数的返回值
3.2.1 返回引用的函数
3.2.2 返回指针的函数
3.2.3 返回对象的函数
3.2.2 返回指针的函数—补充
说明:new语句
delete语句
NULL
New格式: 指针变量 = new 类型[n]
Delete格式: delete 指针变量
NULL表示空
3.2.3 返回对象的函数
3.2.4 返回值作为函数参数
3.3 内联函数
定义函数时,加inline关键字表示该函数为内联函数。
程序中的内联函数在程序编译时,将函数体替换至程序中函数调用位置,造成程序变长,效率提高。
注意:内联函数中不能出现循环、switch语句内联函数一般短小,不宜过长应在调用之前声明或定义
3.4 函数重载和默认参数
同一个函数名实现多种功能,在C++中称为多态,可利用函数重载和默认参数两种方式实现
同一个函数名实现多种功能,在C++中称为多态,可利用函数重载和默认参数两种方式实现
定义或声明函数时,给出参数初始化值,则函数调用时若省略参数,则参数取该初始化值。称为默认参数。
同一个函数名实现多种功能,在C++中称为多态,可利用函数重载和默认参数两种方式实现
注意:
函数重载和默认参数可同时使用。
若已定义默认参数函数,则不能重载参数类型相同,参数个数少于默认参数个数的函数。
同一个函数名实现多种功能,在C++中称为多态,可利用函数重载和默认参数两种方式实现
注意:
函数重载和默认参数可同时使用。
若已定义默认参数函数,则不能重载参数类型相同,参数个数少于默认参数个数的函数。参数类型不同时,可以重载。
3.5 函数模板
有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。
有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。
有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。
有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。
函数模板定义格式:
定义函数模板后,函数调用时根据函数参数来类型来确定调用哪个版本的函数。函数执行时确定参数类型的函数称为模板函数。
此种形式调用中
一般可省略。Typename可替代class
若某函数参数类型不一致时,也可定义函数模板。