C++使用函数的一些高级操作指南

 更新时间:2022年12月14日 09:01:29   作者:蛋超饭不要加蛋  
C++中函数调用的方法与C语言并无区别,依旧是在调用方函数中执行函数调用语句来实现函数调用,下面这篇文章主要给大家介绍了关于C++使用函数的一些高级操作,文中通过图文介绍的非常详细,需要的朋友可以参考下

一.函数的默认参数

1.默认参数的性质  

在接触函数函数之前,我们使用函数时形式参数都只是定义了并没有定义的同时初始化,但其实函数的形式参数是可以定义的同时初始化的,也就是形式参数可以有默认值,这时形式参数的默认值称之为函数的默认参数

函数默认参数的性质为:

(1)当函数有默认参数时,该参数可以不传值,则该参数的值就为默认值,当给该参数传值时,传的值会将默认值覆盖,即修改形参

(2)没有默认值的参数则必须传参

(3)当函数有多个参数并且有默认参数时,当调用时传值的个数小于函数参数个数时,会优先给无默认值的参数传值

我们以最简单的打印函数为例

输出结果

我们可以看到,在主函数调用func函数并给函数传实参,a的值进行了修改并打印 

在上面的基础上,我们定义形参a时给其初始化

输出结果

程序运行的过程为,形参a的默认值为10,在主函数调用并传值20给函数,形参a的值修改为20并打印,当函数形参有默认值时,可以调用时不给函数传值,则形参的值就是默认值

输出结果

可以看到,即使我们不给函数传值,函数依然调用成功并将形参a的默认值打印 

我们在此基础上给函数多个参数,当函数有多个参数时,有默认值的参数可以不传值,但是无默认值的参数必须传值,当传值的个数少于参数个数时,会优先给无默认值的形参传值

输出结果

当我们不给无默认值的参数传值时

编译器报错信息

报错信息是因为函数中形参a没有默认值,就必须传值

经过上述验证,我们基本验证了函数的默认参数的性质

2.函数默认参数的注意事项

函数有多个参数,当我们给一个参数默认值时,则这个参数后面的所有参数都必须有默认值

我们依然以上面的函数为例,我们给函数三个形参

输出结果

可以看到我们正常输出了,下面我们只给a默认值,而b,c没有默认值

编译器报错信息

编译器报错信息显示默认实参不在形参列表。这是因为我们a之后的参数没有默认值导致的,我们给三个参数默认值试试

输出结果

可以看到正常输出了,当我们只给c默认值试试

输出结果

可以看到也正常输出了,这是因为c就是最后一个参数,后面没有参数了,假如c后面有参数,则c后面的参数也必须要有默认值

经过上述验证,我们基本验证,有默认值的参数后面的参数也必须要有默认值

二.函数的占位参数

占位参数,顾名思义就是一个参数占了个位置,就比如我们在火车站等车时,要去上厕所就会将自己的书包放在座位上好占个位置,别人看到你的书包就知道这个作为有人,但并不知道这个人是谁

占位参数的性质:占位参数没有默认值的时候必须给它传值,当占位参数有默认值时,可以不给它传值

我们依然以上面的函数为例

可以看到我们定义了两个参数,但是第二个参数没有名字也没有初始值

输出结果

可以看到我们正常输出了,我们不给占位参数传值试试

编译器报错信息

报错信息显示函数调用的参数太少,这就是因为我们没有给占位参数传值,但是当占位参数有默认值时,按照默认参数的性质,可以不给占位参数传值

 输出结果

可以看到,当占位参数有默认值时,不给其传值也可以正常输出

经过上述验证,我们基本验证占位参数的性质:占位参数没有默认值的时候必须给它传值,当占位参数有默认值时,可以不给它传值

三.函数的重载   

1.重载的性质和条件

函数的重载主要应用于函数重复命名的问题,增强程序的复用性

函数重载有以下三个条件:

(1)两个函数的作用域相同;

(2)两个函数的名字相同

(3)两个函数参数的类型或者参数的个数或者参数的顺序不同

当两个函数满足上面三个条件时,我们就说两个函数可以产生重载,即这两个相同名字的函数可以同时存在和调用且互不影响

我们一一来验证上面的条件

当我们定义两个一模一样的函数,在主函数调用时,编译器傻了,因为调用func()时上面两个函数都符合,编译器不知道该调用哪个,我们来看编译器报错信息

编译器显示void func函数已有主体,这就是我们定义两个一模一样的函数导致的,由于在同一个源文件中,函数的作用域相等,故我们只修改第三个条件,下面我们来修改其中一个函数的参数

(1)修改参数的个数

第一个函数参数个数为0,第二个函数个数为1,当我们在主函数调用func()时,大家可以猜下会调用哪个函数呢,结果肯定是第一个没有参数的函数,因为调用时没有传参

输出结果

输出的没有参数的函数的结果

我们在调用时传一个参数,则会调用第二个参数个数为1的函数

输出结果

可以看到当我们调用时传了一个参数,结果是参数个数为1的函数的结果 

(2)修改参数的类型

我们在第一个函数定义一个int型的参数,在第二个函数定义一个double型的参数,我们在调用时根据传的值的类型决定调用哪个参数

我们在调用时传整形的值

输出结果为参数类型为整形的函数的结果 

 我们在调用时传double的值

输出结果为参数类型为double的函数的结果

(3)修改参数的顺序

我们依然以上面的函数为例,第一个函数我们先定义一个int型的参数再定义一个double的参数,第二个函数我们先定义一个double型的参数再定义一个int型的参数

我们在调用时传一个int型的参数和double的参数

 输出结果为参数类型为 int double的函数的结果

 我们在调用时传一个idouble型的参数和int的参数

输出结果为参数类型为  double int的函数的结果

经过上述验证,当两个函数满足上面三个条件时,可以产生函数重载

2.函数重载的注意事项 

(1)当引用&作为函数参数

当引用&作为函数参数时,有无const修饰决定调用函数的不同

我们在调用函数时传入变量a

输出结果为参数为int型的参数

之所以传入一个int型的值不调用第二个用const修饰引用,是因为const修饰一个变量后,该变量就变为已读,可以近似看成一个常量,当我们调用时传入一个常量

 输出结果就变为了第二个用const修饰参数的函数的结果

(2)不可以用函数的默认参数作为重载条件 

当一个两个参数的函数有一个默认参数,而另一个一个参数的函数没有默认参数时,在主函数调用时,编译器也会因为二义性而报错

当我们在主函数调用func(10)的时候,由上面默认参数的性质可以知道,两个函数都满足调用条件,故编译器因为二义性报错

报错信息显示有多个重载函数符合调用条件,即调用不明确,我们在日常编程中应避免这种二义性        

总结

到此这篇关于C++使用函数的一些高级操作指南的文章就介绍到这了,更多相关C++函数高级操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言中如何获取函数内成员的值你知道吗

    C语言中如何获取函数内成员的值你知道吗

    这篇文章主要为大家详细介绍了C语言中如何获取函数内成员的值的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 浅析string类字符串和C风格字符串之间的区别

    浅析string类字符串和C风格字符串之间的区别

    string类是标准库的类,并不是内置类型,标准库就像是我们自己定义的类差不多的,string类型对象没有标配'\0'结尾的
    2013-09-09
  • C语言实现财务管理系统

    C语言实现财务管理系统

    这篇文章主要为大家详细介绍了C语言实现财务管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • c语言中 基于随机函数的使用详解

    c语言中 基于随机函数的使用详解

    本篇文章对c语言的随机函数进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • 一文详解C语言操作符

    一文详解C语言操作符

    这篇文章主要详细介绍了C语言的操作符,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • C++浅析析构函数的特征

    C++浅析析构函数的特征

    既然在创建对象时有构造函数(给成员初始化),那么在销毁对象时应该还有一个清除成员变量数据的操作咯,析构函数与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成类的一些资源清理工作
    2022-07-07
  • C++实现浮点数精确加法

    C++实现浮点数精确加法

    这篇文章主要为大家详细介绍了C++实现浮点数精确加法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C++封装IATHOOK类实例

    C++封装IATHOOK类实例

    这篇文章主要介绍了C++封装IATHOOK类的实现方法,对IAT的HOOK实例进行了封装,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • 简单总结C++中的修饰符类型

    简单总结C++中的修饰符类型

    这篇文章主要介绍了C++中的修饰符类型总结,是C++入门学习中的基础知识,需要的朋友可以参考下
    2016-05-05
  • C++中的类与对象深度解析

    C++中的类与对象深度解析

    这篇文章主要为大家详细介绍了C++中的类与对象,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02

最新评论