C++几种特殊形式的函数
本篇文章主要介绍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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构