【C++】函数重载 - 给代码增添多彩的魔法

news2025/2/21 20:50:42

        欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。


目录

1、缘起

2、函数重载概述

3、函数重载注意事项 

4、总结


1、缘起

        函数重载,是编程世界中的一抹迷人色彩,让代码焕发出无限魅力。它犹如一位魔法师,能够在代码的舞台上施展出奇妙的变幻。当我们面对不同的情景和需求时,函数重载能够以其神奇的力量,根据参数 类型数量 顺序,自如地选取最合适的法术。就像一本魔法书中的不同章节,每一次调用函数都是在翻阅其中的一页。

        函数重载是一种强大的工具,它不仅能提高代码的可读性,还能让程序员的创造力得到充分的发挥。无论是在 数学计算图形处理 还是 游戏开发 中,函数重载都扮演着重要的角色。它像一枚瑰丽的宝石,闪耀着不同的光芒,为我们的代码增添了多样的可能性。

        函数重载,让我们的代码变得生动有趣。让我们摆脱单调和局限,用它的魔力创造出令人惊叹的程序。让我们一起享受函数重载带来的神奇吧!

2、函数重载概述

作用:函数名可以相同,提高函数的复用性

函数重载满足的条件:

①  同一个作用域下

②  函数名称相同

③  函数参数 类型不同 或者 数量不同 或者 顺序不同

注意:函数的返回值不可以作为函数重载的条件 

示例代码:

#include<iostream>

using namespace std;

//函数声明
void test();
void test(int a);
void test(double a);
void test(int a, double b);
void test(double b, int a);

int main()
{
	test();

	//1、函数参数类型不同
	test(10);
	test(3.14);

	//2、函数参数个数不同
	test(10, 3.14);

	//3、函数参数顺序不同
	test(3.14, 10);
	
	cout << endl;
	system("pause");
	return 0;
}

void test()
{
	cout << "test() 的调用!" << endl;
}

void test(int a)
{
	cout << "test(int a) 的调用!" << endl;
}

void test(double a)
{
	cout << "test(double a) 的调用!" << endl;
}

void test(int a,double b)
{
	cout << "test(int a,double b) 的调用!" << endl;
}

void test(double b, int a)
{
	cout << "test(double b,int a) 的调用!" << endl;
}

3、函数重载注意事项 

①  引用作为重载条件

示例代码 1:

#include<iostream>

using namespace std;

//函数声明
void test(int& a);
void test(const int& a);

int main()
{
	int a = 10;

	test(a);  //调用无 const

	cout << endl;
	system("pause");
	return 0;
}

//引用作为重载条件
void test(int& a)
{
	cout << "test(int& a)调用" << endl;
}

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

注意:const 修饰的变量是一个 const 常量,因为 test(a) 的实参是一个变量,所以 test(a) 调用 void test(int& a) 这个函数。

示例代码 2: 

#include<iostream>

using namespace std;

//函数声明
void test(int& a);
void test(const int& a);

int main()
{
	test(10);  //调用有 const
	
	cout << endl;
	system("pause");
	return 0;
}

//引用作为重载条件
void test(int& a)  //int &a = 10; 不合法
{
	cout << "test(int& a)调用" << endl;
}

void test(const int& a)  //const int& a = 10; 合法
{
	cout << "test(const int& a)调用" << endl;
}

注意:const 修饰的变量是一个 const 常量,因为 test(10) 的实参是一个常量,所以 test(10) 调用 void test(const int& a) 这个函数。 

②  函数重载碰到函数默认参数

示例代码:

#include<iostream>

using namespace std;

//函数声明
void test(int a, int b);
void test(int a);

int main()
{
	test(10);
	
	cout << endl;
	system("pause");
	return 0;
}

//函数重载碰到函数默认参数
void test(int a, int b = 20)  
{
	cout << "test(int a, int b)调用" << endl;
}

void test(int a)  
{
	cout << "test(int a)调用" << endl;
}

注意:如图所示,函数 test(10) 出现报错。因为 void test(int a, int b = 20)  函数中有默认参数 int b = 20,所以 test(10) 函数既可以调用 void test(int a)  函数,也可以调用 void test(int a, int b = 20)  函数。即在这种情况下,函数调用就出现了 二义性,在实际情况中,尽量避免这种情况的发生。

4、总结

        当我们使用函数重载时,就像是和魔法师一起创造魔法般的代码。我们可以传递不同类型的参数,从而调用不同版本的函数,使程序变得灵活而精彩。函数重载是代码世界的魔杖,它引领我们进入一个充满创意和惊喜的奇幻世界。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IMX6ULL平台I2C数据结构分析

IMX6ULL平台I2C数据结构分析 文章目录 IMX6ULL平台I2C数据结构分析i2c_clienti2c_adapterimx_i2c_structimx_i2c_hwdataimx_i2c_dma 在 i.MX 平台的 I2C 驱动中&#xff0c;存在多个相关的结构体&#xff0c;它们之间的联系和在内核中的作用如下&#xff1a; struct i2c_client…

CentOS 7 上安装 Anaconda

一、在 CentOS 7 上安装 Anaconda 的步骤如下&#xff1a; 在官网下载 Anaconda 的最新版本&#xff0c;链接&#xff1a;https://www.anaconda.com/products/distribution 打开终端&#xff0c;进入下载目录&#xff0c;使用以下命令来安装 Anaconda&#xff1a;# 也可直接在…

【JavaScript】线程和进程,JavaScript线程,事件队列,事件循环 ,微任务、宏任务

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 进程和线程JavaScript线程事件队列、事件循环微任务、宏任务面试题1面试题2 进程和线程 进程&a…

有符号定点小数的31bit问题

背景 定点小数就是小数位恒定的小数&#xff0c;在信号处理等领域应用广泛&#xff0c;它的表示格式类似于S1.7&#xff08;有符号&#xff0c;整数部分1bit&#xff0c;小数部分7bit&#xff09;、U0.8&#xff08;无符号&#xff0c;没有整数部分&#xff0c;小数部分8bit&a…

基于java的班级综合测评管理系统的设计与实现

背景 本系统的主要目的在于加速信息化进程&#xff0c;充分利用计算机技术和现代通讯的手段面向学校的服务。建立信息交流平台&#xff0c;方便信息资源的共享&#xff0c;加强各个部门之间的交流。提高整体的办公效率&#xff0c;为管理员以及教师提供辅助的班级综合测评管理…

Java如何远程调试线上项目

远程调试java项目 [Remote Debug JVM] 一、前提二、配置IntelliJ IDEA2.1、打开 IntelliJ IDEA 并打开您的 Java 项目2.2、单击 "Run" 菜单&#xff0c;然后选择 "Edit Configurations..."2.3、在 "Run/Debug Configurations" 对话框中&#xff…

c++ ffmpeg 开发之配置文件(1)

第一 目录结构 D:\work\c\ffmpeg //项目根目录 D:\work\c\ffmpeg\depend //ffmpeg ffmpeg c开发包点击下载 D:\work\c\ffmpeg\include D:\work\c\ffmpeg\depend\lib D:\work\c\ffmpeg\source //源码根目录 第二&#xff1a;测试源码&#xff0c;名字自己随意起…

AntDB数据库参加开源数据库技术沙龙,分享全栈业务能力

5月12日&#xff0c;由PostgreSQL中文社区和PolarDB开源数据库举办的开源数据库技术沙龙温州站于温州大学举办。此次活动邀请了众多数据库领域的专家和技术大咖&#xff0c;旨在促进数据库与温州产业界和学术界的交融发展与合作&#xff0c;共同探讨数据库产业未来的发展趋势&a…

Java高并发核心编程—CAS与JUC原子类

注&#xff1a;本笔记是阅读《Java高并发核心编程卷2》整理的笔记&#xff01; CAS原理 JUC原子类一Atomic 基本原子类 数组原子类 引用原子类 字段更新原子类 AtomicInteger 线程安全原理 引用类型原子类 属性更新原子类 ABA问题 提升高并发场景下CAS提作的性能 以空间换时间:…

idea 调试远程docker中的spring boot 项目

开发环境 idea-2023&#xff08;放心&#xff0c;旧版本也可以远程调试&#xff09; Java版本&#xff1a;17 生产环境 docker版本&#xff1a;23.0.3 Java版本1&#xff1a;openjdk:17.0.2&#xff08;基于Java17的项目&#xff09; Java版本2&#xff1a;adoptopenjdk:…

开源网安亮相粤港澳大湾区CIO高峰论坛,保障企业数字化安全转型

近日&#xff0c;由深圳市工业化与信息化局、深圳市科学技术协会指导&#xff0c;深圳市CIO协会主办的“2023中国(深圳)数字化转型大会暨粤港澳大湾区CIO高峰论坛”圆满完成。开源网安作为拥有软件安全领域全链条产品的厂商&#xff0c;携多年来打造的国产化软件安全替代方案&a…

EMC模式如何助力新能源服务商攻坚克难

01. 什么是合同能源管理&#xff1f; 合同能源管理(EMC-Energy Management Contract)是一种新型的市场化节能机制,其实质就是以减少的能源费用来支付节能项目全部成本的节能投资方式。&#xff1a;节能服务公司与用能单位以契约形式约定节能项目的节能目标&#xff0c;节能服务…

【Python脚本】视频稳像(Video Stabilization)

#【Python脚本】视频稳像(Video Stabilization) 参考&#xff1a;博客1 参考&#xff1a; 原文&#xff1a;https://blog.csdn.net/hjl240/article/details/52683738 开源&#xff1a;关键词 Video Stabilization 不错&#xff1a; https://github.com/yaochih/awesome-vide…

秒杀系统常见问题—如何避免库存超卖?

大家好&#xff01;我是sum墨&#xff0c;一个一线的底层码农&#xff0c;平时喜欢研究和思考一些技术相关的问题并整理成文&#xff0c;限于本人水平&#xff0c;如果文章和代码有表述不当之处&#xff0c;还请不吝赐教。 以下是正文&#xff01; 先看问题 首先上一串代码 …

Linux SUID提权脏牛提权

SUID提权 suid就是set user id 。设置了SUID后&#xff0c;文件启动的时候就会以root的权限去运行。就是一个普通用户运行的时候&#xff0c;因为有SUID&#xff0c;所以用root权限去运行它。 加SUID权限chmod ux 这里开始复现。 上传Linux提权信息检测脚本LinEnum find …

堆及其实现

目录 一&#xff1a;堆的概念及结构 1.概念 2.堆的性质 二&#xff1a;堆的实现 1.堆的构建 2.堆的销毁 3.数据的交换 4.堆的插入 5.堆的判空 6.堆的删除 7.取堆顶的数据 8.堆的数据个数 9.示例 三&#xff1a;完整的代码 一&#xff…

十、数据仓库详细介绍(数据质量)理论与经验

数据质量管理是对数据从计划、收集、记录、存储、回收、分析和展示生命周期的每个阶段里可能引发的数据质量问题&#xff0c;进行识别、度量、监控、预警等一系列管理活动&#xff0c;并通过改善和提高组织的管理水平使得数据质量获得进一步提高。数据质量管理的终极目标是通过…

会声会影2023最新完整版免费下载

会声会影2023操作简单&#xff0c;功能同样强大&#xff01;会声会影附带上百种特效、滤镜、转场、模板。同时各类专业级视频工具&#xff0c;如调色、遮罩、绿幕抠像、运动追踪、分屏创建器&#xff0c;满足更高标准的视频需求。这款软件上手操作简单易学&#xff0c;就算你在…

Linux之进程管理类命令

进程管理类命令 ps&#xff1a;查看当前系统进程状态 1&#xff09;基本语法 语法说明ps aux查看系统中所有进程ps -ef可以查看父子进程之间的关系 2&#xff09;选项说明 选项说明a列出带有终端的所有用户的进程x列出当前用户的所有进程&#xff0c;包括没有终端的进程u面…

C语言的一些杂记6

实现矩阵序号转置的三种方式 for (i 0; i < row * col; i)t[i / row][i % row] m[i % row][i / row];for (i 0; i < row; i)for (j 0; j < col; j)t[j][i] m[i][j];for (i 0; i < row; i)for (j 0; j < col; j)*(*(t j) i) *(*(m i) j); 变相数组 …