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

        欢迎来到博主 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、总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

动态规划-状态压缩DP

[SCOI2005] 互不侵犯 题目描述 https://www.luogu.com.cn/problem/P1896 在NN的棋盘里面放K个国王&#xff0c;使他们互不攻击&#xff0c;共有多少种摆放方案。国王能攻击到它上下左右&#xff0c;以及左上左下右上右下八个方向上附近的各一个格子&#xff0c;共8个格子。 …

堪比ChatGPT,Claude注册和使用教程

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT资源 Claude简介 Claude是一款人工智能聊天机器人。主要有以下特征: 使用自己的模型与训练方法,而不是基于GPT-3等开源框架。模型采用Transformer编码器与解码器的结构,并使用对话上下文的双向…

实验六 自动驾驶建模与仿真

【实验目的】 了解Matlab/Simulink软件环境&#xff0c;熟悉Simulink建模步骤&#xff1b;了解车辆运动控制的基本原理&#xff0c;学会简单的车辆运动控制建模及仿真&#xff1b;了解自动驾驶建模的基本过程&#xff0c;了解典型ADAS系统模型的应用特点。了解自动驾驶相关函数…

老司机解读香农定理、奈奎斯特定理、编码与调制

工程师都会考虑一个问题&#xff1a;信道上到底可以传输多大的数据&#xff0c;或者指定的信道上的极限传输率是多少。这就是信道容量的问题。例如&#xff0c;在xDSL系统中&#xff0c;我们使用的传输介质是仅有几兆带宽的电话线&#xff0c;而上面要传送几兆、十几兆甚至几十…

用 Python 写 3D 游戏

vizard介绍 Vizard是一款虚拟现实开发平台软件&#xff0c;从开发至今已走过十个年头。它基于C/C&#xff0c;运用新近OpenGL拓展模块开发出的高性能图形引擎。当运用Python语言执行开发时&#xff0c;Vizard同时自动将编写的程式转换为字节码抽象层(LAXMI)&#xff0c;进而运行…

WorkPlus AI助理 | 将企业业务场景与ChatGPT结合

近年来&#xff0c;人工智能成为了企业数字化转型的热门话题&#xff0c;作为被训练的语言模型&#xff0c;ChatGPT具备模拟对话、回答问题、写代码、写小说、进行线上内容创作的能力&#xff0c;还能根据聊天的上下文进行互动。作为一款新兴的人工智能应用程序&#xff0c;对于…

【IDEA】DeBug(图文并茂)

文章目录 01_Debug简介和意义02_IDEA中的Debug步骤03_跳转到当前代码执行的行04_步过调试的使用05_步入调试的使用06_强制步入调试的使用07_步出调试的使用08_回退断点调试的使用09_运行到光标处10_计算表达式11_条件断点12_多线程调试 IDAEA&#xff08;Interactive Data Anal…

【Linux高级 I/O(3)】如何使用阻塞 I/O 与非阻塞 I/O?——poll()函数

poll()函数介绍 系统调用 poll()与 select()函数很相似&#xff0c;但函数接口有所不同。在 select()函数中&#xff0c;我们提供三个 fd_set 集合&#xff0c;在每个集合中添加我们关心的文件描述符&#xff1b;而在 poll()函数中&#xff0c;则需要构造一个 struct pollfd 类…

分享18个好用的ChatGPT插件

上周ChatGPT又进化了&#xff0c;支持联网还有70几种第三方插件&#xff0c;不过还是老样子&#xff0c;只服务氪金玩家&#xff0c;免费端可能还得等等。之前只开放了俩插件&#xff0c;网络浏览器和代码解释器&#xff0c;只能说是真的不够用。 ChatGPT&#xff1a;不够&…

(一)before initialization of D3D(初始化D3D之前你需要了解的D3D基础知识)

什么是D3D? D3D全称Direct X 3D,即一组API可以用来针对GPU编程,不过他最主要的作用是用来渲染(不过现在也有很多其他应用比如d3d11va[Direct X 3D 11 Video API]用来进行硬件加速解码) Tips:Direct X 3D主要用来渲染,既然我们说到可以针对GPU编程了,当然不只是渲染的工作可以…

布隆过滤器和布谷鸟过滤器

过滤器使用场景&#xff1a; 比如有如下几个需求&#xff1a; 1.原本有10亿个号码&#xff0c;现在又来了10万个号码&#xff0c;要快速准确判断这10万个号码是否在10亿个号码库中&#xff1f;   解决办法一&#xff1a;将10亿个号码存入数据库中&#xff0c;进行数据库查询&…

iptables防火墙

iptables防火墙 一、iptables概述1.netfilter 与 iptables 的关系1&#xff09;netfilter2&#xff09;iptables 2.四表五链1&#xff09;四表2&#xff09;五链3&#xff09;表的匹配优先级4&#xff09;规则链之间的匹配顺序5&#xff09;规则链内的匹配顺序 二、iptables防火…

CodeForces.1806A .平面移动.[简单][判断可达范围][找步数规律]

题目描述&#xff1a; 题目解读&#xff1a; 给定移动规则以及起始点&#xff0c;终点&#xff1b;分析终点是否可达&#xff0c;可达则输出最小步数。 解题思路&#xff1a; 首先要判定是否可达。画图可知&#xff0c;对于题目给定的移动规则&#xff0c;只能到达起始点(a,b…

AWD竞赛全流程解析

AWD(Attack With Defense&#xff0c;攻防兼备)是一个非常有意思的模式&#xff0c;你需要在一场比赛里要扮演攻击方和防守方&#xff0c;攻者得分&#xff0c;失守者会被扣分。也就是说&#xff0c;攻击别人的靶机可以获取 Flag 分数时&#xff0c;别人会被扣分&#xff0c;同…

【数据分享】我国地级市绿地利用现状数据(9个指标\Shp格式)

绿地是城市生态的重要组成部分&#xff0c;在很多分析中都会用到绿地数据&#xff01;之前我们分享过Shp和Excel格式的全国地级市2003-2020年绿地面积数据&#xff08;可查看之前文章获悉详情&#xff09;&#xff0c;以及中国31个主要城市的绿地空间分布的栅格数据&#xff08…

ARM的读写内存指令与栈的应用

1.基础读写指令 写内存指令&#xff1a;STR MOV R1, #0xFF000000 MOV R2, #0x40000000 STR R1, [R2] 将R1寄存器中的数据写入到R2指向的内存空间 需注意&#xff0c;此命令是将R1中的数据写给R2所指向的内存空间&#xff0c;而不是直接把R1的数据赋给R2&#xff0c;R2寄存器…

华为、思科、Juniper 三厂商NAT配置详解

大家好&#xff0c;这里是网络技术联盟站。 本文给大家介绍华为、思科、Juniper 三大厂商NAT配置详解。 1. 华为&#xff08;Huawei&#xff09; 华为是一家全球领先的信息与通信技术解决方案供应商&#xff0c;其网络设备提供了强大的NAT功能。 下面是华为设备上的NAT配置示…

【软考中级】软件设计师选择题题集(一)

海明校验码是在n个数据位之外增设k个校验位,从而形成一个k+n位的新的码字, 使新的码字的码距比较均匀地拉大。n与k的关系是(1)。 (1)A.2k - 1≥n + k  B.2n - 1≤ n + k   C.n = k  D.n-1≤k 【答案】A 【解析】 【答案】B A 【解析】 在采用结构化方法进行系统分析时,…

这才是CSDN最系统的网络安全学习路线(建议收藏)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

ChatGPT 的议论文究竟写的怎么样?111 位高中教师告诉你答案

夕小瑶科技说 原创 作者 | 小戏、Python 在 OpenAI GPT-4 发布时发布的《GPT-4 Technical Report》中&#xff0c;其中很吸引人眼球的一部分是 GPT-4 应用于教育领域的出色表现&#xff0c;通过让 GPT-4 去完成美国的 AP 课程及考试&#xff0c;来评估 GPT-4 在多个学科中的性…