【C++漂流记】函数的高级应用——函数默认参数、占位参数、重载

news/2024/10/17 20:32:39/

函数的高级应用,侧重介绍函数的默认参数、函数的占位参数、函数重载定义解释及使用。
在这里插入图片描述

文章目录

    • 一、函数的默认参数
    • 二、函数的占位参数
    • 三、函数重载
      • 函数重载的注意事项

一、函数的默认参数

函数默认参数是指在函数声明时为参数提供一个默认值,这样在调用函数时如果没有传入相应的参数,就会使用默认值代替。函数默认参数可以简化函数的调用,使得函数更加灵活。

函数默认参数的解释:

  • 函数默认参数是在函数声明时为参数提供一个默认值。
  • 默认参数可以简化函数的调用,使得函数更加灵活。
  • 默认参数只能在函数声明中提供,不能在函数定义中提供。
  • 默认参数只能从右向左连续设置,即右侧的参数必须都有默认值,左侧的参数不能有默认值。

示例代码:

#include <iostream>// 带有默认参数的函数
void printMessage(std::string message = "Hello, world!") {std::cout << message << std::endl;
}int main() {// 调用函数时不传入参数printMessage(); // 输出: Hello, world!// 调用函数时传入参数printMessage("Hello, C++!"); // 输出: Hello, C++!return 0;
}

在上面的例子中,printMessage函数的默认参数是"Hello, world!"。当调用函数时没有传入参数时,函数会使用默认参数"Hello, world!"进行处理。当传入参数时,函数会使用传入的参数进行处理。在main函数中的两次调用中,第一次没有传入参数,所以使用了默认参数,输出了"Hello, world!";第二次传入了参数"Hello, C++!",所以输出了"Hello, C++!"


二、函数的占位参数

函数的占位参数是指在函数声明或定义中使用一个没有具体名称的参数,通常用下划线 _ 表示。占位参数在函数调用时不会被使用,它的存在只是为了占据参数位置,用于保持函数的参数个数和顺序的一致性。

占位参数的解释:

  • 占位参数在函数声明或定义中使用一个没有具体名称的参数。
  • 占位参数在函数调用时不会被使用,它的存在只是为了保持函数的参数个数和顺序的一致性。
  • 占位参数通常用下划线 _ 表示,但实际上可以使用任何合法的标识符作为占位符。
  • 占位参数可以在函数声明或定义中的任何位置使用,但通常将其放在参数列表的末尾。

示例代码:

#include <iostream>// 带有占位参数的函数
void printNumbers(int, int, _) {std::cout << "Printing numbers..." << std::endl;
}int main() {printNumbers(1, 2, 3); // 调用函数时传入三个参数,占位参数不会被使用return 0;
}

在上面的例子中,printNumbers函数有三个参数,其中第三个参数是一个占位参数。在函数调用时,传入了三个参数,但是占位参数并没有被使用。占位参数的存在只是为了保持函数的参数个数和顺序的一致性。

三、函数重载

函数重载是指在同一个作用域内,可以定义多个同名但参数列表不同的函数。通过函数重载,可以根据不同的参数类型和个数来调用不同的函数,从而提高代码的灵活性和可读性。

函数重载的解释:

  • 函数重载是指在同一个作用域内,可以定义多个同名但参数列表不同的函数。
  • 函数重载通过参数类型和个数的不同来区分不同的函数。
  • 函数重载可以提高代码的灵活性和可读性,使得函数调用更加直观和自然。
  • 函数重载只能通过参数类型和个数的不同来区分函数,返回值类型不同不会构成函数重载。

示例代码:

#include <iostream>// 函数重载
void printNumber(int num) {std::cout << "Printing an integer: " << num << std::endl;
}void printNumber(double num) {std::cout << "Printing a double: " << num << std::endl;
}int main() {int a = 10;double b = 3.14;printNumber(a); // 调用第一个printNumber函数,输出: Printing an integer: 10printNumber(b); // 调用第二个printNumber函数,输出: Printing a double: 3.14return 0;
}

在上面的例子中,printNumber函数被重载了两次,分别接受整数参数和双精度浮点数参数。在main函数中,根据传入的参数类型的不同,会调用对应的函数进行处理。传入整数时,调用第一个printNumber函数,输出"Printing an integer: 10";传入双精度浮点数时,调用第二个printNumber函数,输出"Printing a double: 3.14"

函数重载的注意事项

  1. 函数重载仅根据参数的类型和个数来区分函数,返回值类型不会影响函数重载。如果两个函数的参数类型和个数相同,但返回值类型不同,将会导致编译错误。

  2. 函数重载的参数列表必须不同,不能只是参数名称不同。例如,下面的代码是不合法的:

    void foo(int x);
    void foo(int y); // 不合法,参数列表相同
    
  3. 函数重载可以有不同的访问权限,例如一个函数可以是公有的,而另一个函数可以是私有的。这样可以根据需要对不同的函数进行封装和访问控制。

  4. 函数重载可以在类中使用,这被称为成员函数的重载。成员函数的重载可以根据不同的参数类型和个数来区分不同的成员函数。

  5. 当调用一个重载函数时,编译器会根据实参的类型和个数选择最匹配的函数进行调用。如果找不到匹配的函数,将会导致编译错误。

  6. 函数重载可以用于递归函数。递归函数是指函数调用自身的函数。通过函数重载,可以定义多个版本的递归函数,每个版本处理不同的参数类型和个数。


http://www.ppmy.cn/news/1095866.html

相关文章

如何使用Python Newspaper库提取新闻中的关键词

原文&#xff1a;如何使用Python newspaper库提取新闻中的关键词 (techdatafuture.com) 使用Python的newspaper库可以非常方便地从新闻文章中提取关键词。下面是一段解释如何使用该库的代码&#xff0c;并附上相关配置的说明。 首先&#xff0c;确保已经安装了newspa…

代码随想录回溯算法总结

77.组合 class Solution {List<List<Integer>> res new ArrayList();Deque<Integer> path new ArrayDeque();public List<List<Integer>> combine(int n, int k) {combineHelper(n, k, 1);return res;}private void combineHelper(int n, int…

70. 爬楼梯 (进阶),322. 零钱兑换,279.完全平方数

代码随想录训练营第45天|70. 爬楼梯 &#xff08;进阶&#xff0c;322. 零钱兑换&#xff0c;279.完全平方数 70.爬楼梯文章思路代码 322.零钱兑换文章思路代码 279.完全平方数文章思路代码 总结 70.爬楼梯 文章 代码随想录|0070.爬楼梯完全背包版本 思路 将楼梯长度视为背…

Sentinel1.8.6集成nacos

代码&#xff1a;https://gitee.com/gsls200808/sentinel-dashboard-nacos jar包&#xff1a;https://gitee.com/gsls200808/sentinel-dashboard-nacos/releases/tag/v1.8.6.0 代码如果看不到可能需要登录。 官方参考文档&#xff1a; 动态规则扩展 alibaba/Sentinel Wiki…

技术面试与HR面:两者之间的关联与区别

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

得心应手应对 OOM 的疑难杂症

Java全能学习面试指南&#xff1a;https://www.javaxiaobear.cn/ 前面我们提到&#xff0c;类的初始化发生在类加载阶段&#xff0c;那对象都有哪些创建方式呢&#xff1f;除了我们常用的 new&#xff0c;还有下面这些方式&#xff1a; 使用 Class 的 newInstance 方法。使用…

【大数据之Kafka】九、Kafka Broker之文件存储及高效读写数据

1 文件存储 1.1 文件存储机制 Topic是逻辑上的概念&#xff0c;而partition是物理上的概念&#xff0c;每个partition对应于一个log文件&#xff0c;该log文件中存储的是Producer生产的数据。 Producer生产的数据会被不断追加到该log文件末端&#xff0c;为防止log文件过大导致…

晨启,MSP430开发板,51开发板,原理图,PCB图

下载&#xff1a;https://github.com/xddun/blog_code_search