【C++小语法技巧】缺省参数和函数重载

在使用C语言编程过程中,C语言的要求之严格,编程过程之繁琐,大同小异的重复性工作,令C++之父使用C语言编程时也深受其扰,于是乎C++兼容C小语法诞生了

一、缺省参数

在C++中,缺省参数(也称为默认参数)允许在定义函数时为参数指定一个默认值。如果在调用函数时没有提供这个参数的值,那么就会使用默认值。

1.默认参数规则:

(1)只能从左往右传实参,形参只能从右往左缺省

(2)不能在函数声明和函数定义同时给默认参数(一般在函数声明时给)

2.全缺省和半缺省

(1)全缺省:全部参数都设置默认值

(2)半缺省:部分参数设置默认值

代码示例:

#include <iostream>
using namespace std;
//全缺省
void printNumbers(int number1 = 1, int number2 = 2) 
{cout << "Number 1: " << number1 << ", Number 2: " << number2 << endl;
}
//半缺省
void fun(int a, int b=5)
{cout << "a=" << a << ",b=" << b << endl;
}int main() {// 调用函数时提供所有参数printNumbers(10, 20);// 调用函数时省略第二个(使用默认值)printNumbers(40);// 调用函数时不提供任何参数(使用所有默认值)printNumbers();// 调用函数时提供所有参数fun(10, 20);// 调用函数时省略第二个(使用默认值)fun(10);//fun();//错误a没有默认值,缺少实参return 0;
}

运行结果:

二、函数重载

函数重载(Function Overloading)简单来说,它允许我们在同一个作用域内定义多个具有相同名称但参数列表不同的函数。

函数重载前提:

1.同一作用域

2.函数名相同

3.功能类似

区分:参数列表不同,包括参数的类型、个数、类型顺序不同

注:函数返回类型不能区分函数重载

问:为什么c不支持函数重载,c++怎么支持函数重载?

答:首先我们要知道编译的四个过程:

预处理->编译->汇编-> 链接

简单来说:C语言不支持函数重载是因为在连接时直接使用函数名来对函数进行查找

C++是使用修饰过后的函数名(包含函数参数信息)来查找

详细回答如下:

C语言不支持函数重载的原因主要在于其编译后的函数名处理机制。C语言在编译后,会将函数名转化为一个唯一的标识符(通常是在函数名前加上一个下划线),这个标识符在链接阶段用于确定函数的具体实现。由于这个机制并不区分函数的参数类型或数量,所以当存在多个同名但参数不同的函数时,编译器无法区分它们,从而导致编译错误。

然而,C++语言则通过一种称为“名字修饰”(Name Mangling)的技术来支持函数重载。在C++中,编译器在编译过程中会对函数名进行修饰,这种修饰会包含函数的参数类型、数量等信息。因此,在C++中,即使函数名相同,只要参数列表不同(包括参数类型、数量或顺序的不同),那么它们就会被视为不同的函数,从而实现了函数重载。

具体来说,C++编译器在编译时,会将函数名和参数信息一起进行编码,生成一个独一无二的“修饰名”。这个修饰名在链接阶段用于确定函数的具体实现。由于修饰名中包含了函数的参数信息,所以即使函数名相同,只要参数列表不同,它们的修饰名也会不同,从而实现了函数重载。

代码示例:

#include <iostream>
using namespace std;
// 第一个重载函数,无参数
void sayHello() {cout << "Hello, world!" << endl;
}// 第二个重载函数,接受一个int类型的参数
void sayHello(int times) {for (int i = 0; i < times; ++i) {cout << "Hello, " << i + 1 << " time!" << endl;}
}// 第三个重载函数,接受一个double类型的参数,表示某种权重或值
void sayHello(double weight) {cout << "Hello with weight: " << weight << endl;
}int main() {sayHello();sayHello(3);sayHello(1.5);return 0;
}

运行结果:

欢迎大家一起学习交流,有错误可以指正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/702461.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows server 2012 R2添加桌面图标

1、鼠标放到Window图标——右键——搜索 2、输icon——搜索 3、选择显示或隐藏桌面上的的通用图标 4、勾选需要添加到桌面的图标——确定

TimesFM: 预训练的时间序列基础模型

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在阅读过程中有些知识点存在盲区&#xff0c;可以回到如何优雅的谈论大模型重新阅读。另外斯坦福2024人工智能报告解读为通识性读物。若对于如果…

【全开源】房屋出租出售预约系统支持微信小程序+H5+APP

一款基于FastAdminThinkPHPUniapp开发的房屋出租出售预约系统&#xff0c;支持小程序、H5、APP&#xff1b;包含房客、房东(高级授权)、经纪人(高级授权)三种身份。核心功能有&#xff1a;新盘销售、房屋租赁、地图找房、小区找房&#xff0c;地铁找房等方式。 特色功能&#…

基于物联网的智能病房设计-设计说明书

设计摘要&#xff1a; 本设计是基于物联网的智能病房设计&#xff0c;旨在提供更加智能化和便捷的监测和管理病人的环境和生理状态。通过集成多种传感器和通信模块&#xff0c;实现了温度、尿床和点滴异常的监测和提醒功能。具体而言&#xff0c;设计中采用了OLED显示屏来显示…

Python从0到100(二十二):用Python读写CSV文件

一、CSV文件概述 CSV&#xff0c;即逗号分隔值&#xff08;Comma Separated Values&#xff09;&#xff0c;是一种以纯文本形式存储表格数据的通用格式。它因其简洁和易于使用而广泛应用于数据交换&#xff0c;如在数据库、电子表格等应用程序中导入和导出数据。CSV文件的纯文…

Linux线程(四) 生产者消费者模型

目录 一、什么是生产者消费者模型 基本概念 优点以及应用场景 二、 基于阻塞队列的生产者消费者模型 三、POSIX信号量 四、基于环形队列的生产消费模型 一、什么是生产者消费者模型 Linux下的生产者消费者模型是一种经典的多线程或多进程编程设计模式&#xff0c;它用于解…

分体工业读写器的适用场景有哪些?

工业读写器根据设计方式不同&#xff0c;可分为一体式读写器和分体式读写器&#xff0c;不同读写器特点不同&#xff0c;适用场景也不同&#xff0c;下面我们就一起来了解一下超高频分体读写器适用场景有哪些。 超高频分体读写器介绍 超高频分体读写器是一种射频识别(RFID)设…

【ARM】解决Keil MDK报错提示找不到编译器路径的问题

问题场景&#xff1a; 在打开MDK的时候&#xff0c;会跳出提示 Warning: Registered ARM Compiler Version not found in path: ARMCLANG!”&#xff08;如图1&#xff09;这样的提示信息。提示无法找到编译器的路径&#xff0c;这样的问题经常出现在添加旧版本编译器过程中操…

消防物资存储|基于SSM+vue的消防物资存储系统的设计与实现(源码+数据库+文档)

消防物资存储系统 目录 基于SSM&#xff0b;vue的消防物资存储系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1用户功能模块 2 管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介…

界面控件Telerik UI for WPF中文教程 - 如何轻松实现日期范围选择?

Telerik UI for WPF拥有超过100个控件来创建美观、高性能的桌面应用程序&#xff0c;同时还能快速构建企业级办公WPF应用程序。UI for WPF支持MVVM、触摸等&#xff0c;创建的应用程序可靠且结构良好&#xff0c;非常容易维护&#xff0c;其直观的API将无缝地集成Visual Studio…

物联网促进信息化——​青创智通工业物联网解决方案​

随着传感器网络&#xff08;WSN)、无线射频识别&#xff08;RFID&#xff09;以及微电子机械系统(MEIVIS&#xff09;等技术的不断成熟,扩展了人们对信息获取和使用的能力&#xff0c;并将提高制造效率、改善产品质量、降低产品成本和资源消耗、为用户提供更加透明和个性化的服…

【漏洞复现】泛微OA E-Cology SignatureDownLoad SQL注入漏洞

漏洞描述&#xff1a; 泛微OA E-Cology是一款面向中大型组织的数字化办公产品&#xff0c;它基于全新的设计理念和管理思想&#xff0c;旨在为中大型组织创建一个全新的高效协同办公环境。泛微OA E-Cology SignatureDownLoad存在SQL注入漏洞&#xff0c;允许攻击者非法访问和操…