博客
关于我
函数提高
阅读量:515 次
发布时间:2019-03-07

本文共 2053 字,大约阅读时间需要 6 分钟。

C++函数默认参数与占位参数及函数重载

函数默认参数

在C++中,默认参数可以在函数的形以参数列表中指定。这意味着某些参数可以不需要在调用函数时显式指定,这使得代码更加简洁。然而,默认参数也带有一定的规则。

默认参数规则

  • 默认参数位置:如果某一个参数有默认值,则其后的所有参数也必须声明为默认参数。这意味着,参数列表中的默认值必须从左到右连续指定。此规则确保了函数调用的严格性。

  • 默认参数与实现:在函数声明中如果有默认参数,函数实现中的参数缺省情况必须与声明中一致。Otherwise, расходSky的函数行为可能会出现故障。

  • 示例

    #include 
    using namespace std;int func(int a, int b = 10, int c = 10) { return a + b + c;}int main() { cout << "ret = " << func(20, 20) << endl; cout << "ret = " << func(100) << endl; system("pause"); return 0;}

    在以上代码中,函数func的参数中bc都有默认值。在调用函数时,可以省略这些参数。而如果在声明中存在参数缺省,实现中必须让这些参数也具备缺省特性,否则会出现编译错误。


    函数占位参数

    在C++中,占位参数在函数的形参列表中使用,用于占位。当调用函数时,必须填补这些占位参数。占位参数的作用是让函数的参数可以在不影响函数行为的情况下,灵活地填充。

    占位参数规则

    • 占位参数必须由函数的调用者填充。无法通过函数内部进行默认值的赋值。
    • 占位参数必须按顺序填充,且占位参数之间不允许有其他类型的参数。

    示例

    #include 
    using namespace std;void func(int a, int) { cout << "this is func" << endl;}int main() { func(10, 10); system("pause"); return 0;}

    在以上代码中,函数func的第二个参数是一个占位参数(int)。在调用时,必须同时提供a和占位参数的值,否则无法编译。


    函数重载

    函数重载(Overloading)允许多个函数具有相同的函数名称,但在参数列表中有所不同。这样的机制让函数具有更高的复用性。

    函数重载条件

  • 作用域限制:所有重载函数必须在同一个作用域内。
  • 函数名称:函数名称必须完全相同。
  • 参数条件:参数列表中至少有一个参数的类型、数量或顺序与其他函数不同。
  • 注意事项

    • 函数重载不允许使用函数返回类型作为条件。
    • 当函数具有默认参数时,必须谨慎地使用重载函数,以避免因参数缺失而导致歧义。

    示例

    #include 
    using namespace std;void func() { cout << "func 的调用!" << endl;}void func(int a) { cout << "func (int a) 的调用!" << endl;}void func(double a) { cout << "func (double a) 的调用!" << endl;}void func(int a, double b) { cout << "func (int a ,double b) 的调用!" << endl;}void func(double a, int b) { cout << "func (double a ,int b) 的调用!" << endl;}int main() { func(); func(10); func(3.14); func(10, 3.14); func(3.14 , 10); system("pause"); return 0;}

    在上述代码中,每一个函数都具有不同的参数列表,因此可以实现函数重载。用户可以根据需要调用不同的函数版本,同时保持相同的函数名称。


    函数重载注意事项

  • 引用作为重载条件:引用类型可能会导致函数重载。例如:

    void func(int &a) {    cout << "func (int &a) 调用 " << endl;}void func(const int &a) {    cout << "func (const int &a) 调用 " << endl;}

    这两个函数具有相同的名称,但参数类型不同,允许函数重载。

  • 默认参数与函数重载:默认参数可能会导致函数签名冲突,影响函数重载的可行性。在设计功能时,必须确保默认参数和重载函数不会引起歧义。

  • 在实际编程中,需要特别关注这些注意事项,确保函数重载的正确性和代码的一致性。

    转载地址:http://bawnz.baihongyu.com/

    你可能感兴趣的文章
    mysqli
    查看>>
    MySQLIntegrityConstraintViolationException异常处理
    查看>>
    mysqlreport分析工具详解
    查看>>
    MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
    查看>>
    Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
    查看>>
    mysql_real_connect 参数注意
    查看>>
    mysql_secure_installation初始化数据库报Access denied
    查看>>
    MySQL_西安11月销售昨日未上架的产品_20161212
    查看>>
    Mysql——深入浅出InnoDB底层原理
    查看>>
    MySQL“被动”性能优化汇总
    查看>>
    MySQL、HBase 和 Elasticsearch:特点与区别详解
    查看>>
    MySQL、Redis高频面试题汇总
    查看>>
    MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
    查看>>
    mysql一个字段为空时使用另一个字段排序
    查看>>
    MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
    查看>>
    MYSQL一直显示正在启动
    查看>>
    MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
    查看>>
    MySQL万字总结!超详细!
    查看>>
    Mysql下载以及安装(新手入门,超详细)
    查看>>
    MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
    查看>>