这篇文章给大家分享的是有关c++中函数怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
<强>第六章函数强>
函数是一个命名了的代码块,通过调用函数执行相应的代码。
函数基础
- <李>
通过<强>调用运算符强>(调用操作符)来执行函数。其形式是一对圆括号。
李> <李>函数的调用完成两项工作(如下),此时<强>主调函数强>(调用函数)的执行被暂时中断,被调函数(称为函数)开始执行。
李>- <李>
用实参初始化函数对应的形参。
李> <李>将控制权转移给被调函数。
李>返回语句:
李>- <李>
返回返回语句中的值
李> <李>将控制权从被调函数移回主调函数
李>局部对象
- <李>
名字有作用域,对象有<强>生命周期强>(一生)
李> <李><>强自动对象强>(自动对象):当函数的控制路径经过变量定义语句时创建该对象,当达到定义所在的块末尾时销毁它。
李> <李> <强>局部静态对象强>:程序执行路径第一次经过对象定义语句时初始化,知道程序终止才被销毁。
- <李>
将局部变量定义为<强>静态强>获得,例如:
<代码>
//统计函数count_calls()被调用了多少次
size_t count_calls ()
{
静态size_t ctr=0;,//调用结束后,这个值仍然有效
+ + ctr返回;
}
int主要()
{
(size_t我=0;我!=10;+ + i)
cout & lt; & lt;cout_calls () & lt; & lt;endl;
返回0;
}
代码>
函数声明
- <李>
也称作<强>函数原型强>(函数原型)
李> <李>函数三要素(<强>返回类型,函数名,形参类型强>)描述了函数的接口,函数声明中形参名可省略。
李> <李>函数应在头文件中声明,源文件中定义。
李> <李>分离式编译
李>参数传递
如果形参是引用类型,它将绑定到对应的实参上,否则,将实参的值拷贝后赋给形参。
-如果无需修改引用形参的值,最好将其声明为常量引用。
主要:处理命令行选项
假设主要函数位于可执行文件食物内,我们可以向程序传递下面的选项:
prog -d -o ofile data0
这些命令通过两个可选的形参传递给主函数:
int 主要(int 命令行参数个数,char * argv []), {…}//或: 命令行参数个数,int 主要(int char * * argv), {…}
当实参传给主函数之后,argv的第一个元素指向程序的名字或者一个空字符串,接下来的元素一次传递命令行提供的实参,最后一个指针只会掉元素值保证为0。
-以上面的命令行为例:
argc =, 5, argv [0],=,“prog" argv [1],=,“-d" argv [2],=,“-o" argv [3],=,“ofile" argv [4],=,“data0" argv [5],=, 0;
含有可变形参的函数
- <李>
c++ 11新标准提供两种方法编写能处理不同数量实参的函数:
- <李>
所有实参类型相同,可以传递一个名为initializer_list的标准库类型。
李> <李>实参类型不同,我们可以编写一种特殊的函数,叫做可变参数模板。
李>c++还有一种特殊的形参类型:省略符。可以用它传递可变数量的实参。这种功能一般只用于与C函数交互的接口程序。
李> <李> <强> initializer_list形参强>
- <李>
其类型定义在同名的头文件中
李> <李>提供如下操作:
<代码>
initializer_list
initializer_list
//lst的元素数量和初始值一样多,lst的元素是对应初始值的副本;列表中的元素是const
lst2 (lst)
lst2=lst,//拷贝或复制一个initializer_list对象不会拷贝列表中的元素;拷贝后,原始列表和副本元素共享
lst.size(),//列表中元素的数量
lst.begin()//返回指向lst中首元素的指针
lst.end (),//返回指向lst中尾元素下一位置的指针
代码>
返回类型和返回语句
- <李>
引用返回左值,其他返回类型得到右值。