大家好,欢迎来到IT知识分享网。
本篇文章主要介绍C++语言中5中特殊形式的函数,分别是带默认形参值的函数、重载函数、内联函数、带形参和返回值的主函数以及递归函数。
一、带默认形参值的函数
如果函数的形参在多数情况下都可以取某个固定的值,程序员可以在定义函数或声明函数原型时将该值指定为形式参数的默认值,这就是带默认形参值的函数。调用带默认形参值的函数时,如果给出实参,则将实参值赋值给形参变量,否则将默认值赋值给形参变量。
示例:double Exchange(double amount,double rate = 6.8993)
{
return amount / rate;//实现人名币汇率换算,默认兑换成美元汇率6.8993
}
带默认形参值函数的语法细则:
1)带默认值的形参,调用带默认形参值的函数时,如果给出实参,则将实参值赋值给形参变量,否则将默认值赋值给形参变量。
2)在函数原型声明中指定默认值。如果函数定义调用语句之后,可以在调用语句之前对函数原型进行声明。声明时可以指定形式参数的默认值,此时函数定义中不在指定默认值。函数具有文件作用域,同一函数在相同作用域中只能指定一次默认值。
3)同一函数在不同作用域可以指定不同默认值。如果多个默认值同时有效,调用函数时根据局部优先原则选择默认值。
4)带默认值的形参必须定义在形参列表的后面。必须把带默认值的形参放在不带默认值的形参后面。
二、重载函数
通常,同一文件中的函数不能重名,不同文件中的外部函数(非静态函数)之间也不能重名。C++语言规定:如果两个函数形参的个数不同或数据类型不同,那么这两个函数就可以重名。这样的重名函数被称为重载函数。注意:返回值类型或形参名字不同不能重载。
示例:int Max(int x,int y); double Max(double x,double y); int Max(int x,int y,int z);这三个函数可以称重载。
int Maz(int x,int y);和 double Max(int x,inty);不可以重载
三、内联函数
内联函数是一种特殊函数,它在保证程序开发效率的同时,不见底程序的执行效率,其原理是:编译源程序时将函数代码直接嵌入到每一个调用语句处,而执行时不在进行函数跳转和数据传递。
示例:inline double Exchange(double amount,double rate = 6.8993)
{
return amount / rate;//实现人名币汇率换算,默认兑换成美元汇率6.8993
}
内联函数的语法细则:
1)关键字inline。在函数定义的函数头前面加关键字inline。如果函数定义在调用语句之后,或者在其他文件中,则在调用前声明该函数原型时加关键字inline。
2)内联函数需是简单的函数。如果该函数的函数体比较复杂(例如包含循环语句),编译器将自动按照非内联的方式进行编译。
3)内联函数的执行效率。内联函数只有被多次调用,其执行效率才能体现出来,因为一般只是将频繁调用的简单函数定义成内联函数。
四、带有形参和返回值的主函数
C++语言标准对主函数main有如下规定:
1) 一个C++程序有且仅有一个名为mian的主函数,主函数不能被重载。
2)主函数是程序的起点。
3)主函数的函数类型为int型,需返回一个int型整数。
4)主函数可以定义形参来接收实参数据,也可以忽略形参(此时操作系统传递过来的实参数据将被忽略)。
示例:有参形式
int main(int argc,char *argv[ ]) //int main() 格式为无参形式
{
//此处为主函数代码
return 0;
}
argc表示main接收到的参数个数。argv[0]表示该程序的文件名,argv[1]表示第一个实参数据。采用无参形式时,操作系统所传递过来的实参数据被忽略。主函数通过返回值传递自己的状态0为正常,-1为异常退出。
五、递归函数
C++语言使用递归函数描述递归算法。递归函数的定义和调用域普通函数没什么两样,所不同的是递归函数的函数体应包含描述递归过程的三要素,即递归总结条件、已知结果和递归公式。
一个典型递归函数定义形式如下:
函数类型 函数名(形参列表)
{
. . .
if(递归终结条件)
取地已知结果;
else
按照递归公式调用自身;
}
示例:通过递归法求解阶乘N!
int Factorial(int N)
{
int result;
if (N == 0 )
result = 1;
else
result = N * Factorial(N-1);
return reslt;
}
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/33640.html