【C++】函数重载 ① ( 函数重载概念 | 函数重载判断标准 - 参数个数 / 类型 / 顺序 | 返回值不是函数重载判定标准 )

news2024/11/25 19:43:32

文章目录

  • 一、函数重载
    • 1、函数重载概念
    • 2、函数重载判断标准
  • 二、代码示例
    • 1、代码示例 - 函数重载
    • 2、代码示例 - 返回值不是函数重载判定标准


博客总结 :

  • 重载函数 : 使用 相同 的 函数名 , 定义 不同 的 函数参数列表 ;
  • 判定标准 : 只有 函数参数 的 个数 / 类型 / 顺序 的不同 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ;




一、函数重载




1、函数重载概念


C++ 中 " 函数重载 " 概念 :

  • 使用 相同 的 函数名 , 定义 不同 的 函数 ;
  • 函数名 相同 , 参数列表 的 参数顺序 或 参数类型 不同 ;

注意 : 只有 函数参数 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ;


2、函数重载判断标准


" 函数重载 " 满足的条件 ( 判断标准 ) :

  • 参数 " 个数 " 不同
  • 参数 " 类型 " 不同
  • 参数 " 顺序 " 不同

只有 函数参数 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ;





二、代码示例




1、代码示例 - 函数重载


在下面的代码中 , 定义了 3 个 fun 函数 , 都是重载函数 ;

第 1 个 fun 函数 , 接收一个 int 整型参数 ;

// 函数1 : 接收一个整数参数  
void fun(int i) {
	cout << "打印整数: " << i << endl;
}

第 2 个 fun 函数 , 接收 2 个 int 类型参数 ; 该 重载函数 与 第 1 个 函数 , 参数个数不同 ;

// 函数2 : 接收两个整数参数  
void fun(int i, int j) {
	cout << "打印两个整数: " << i << " 和 " << j << endl;
}

第 3 个 fun 函数 , 接收 1 个 float 浮点类型参数 , 该 重载函数 与 第 1 个函数 , 参数类型不同 , 与 第 2 个函数 , 参数 类型 和 个数 都不同 ;

// 函数3 : 接收一个浮点数参数  
void fun(float f) {
	cout << "打印浮点数: " << f <<endl;
}

调用函数时 , 根据 传入 的参数的不同 , 判定 调用的是 哪个 重载函数 ;

传入 实参 4 , 参数类型是 1 个 int 类型 , 调用的是 第 1 个重载函数 ;

fun(4);				// 调用第一个 fun 函数  

传入 实参 2, 3 , 参数类型是 2 个 int 类型 , 调用的是 第 2 个重载函数 ;

fun(2, 3);			// 调用第二个 fun 函数  

传入 实参 1.5f , 参数类型是 1 个 float 类型 , 调用的是 第 3 个重载函数 ;

fun(1.5f);          // 调用第三个 fun 函数  

代码示例 :

// 包含 C++ 头文件
#include "iostream"

// 使用 std 标准命名空间
//		该命名空间中 , 定义了很多标准定义
using namespace std;

// 函数重载示例  

// 函数1 : 接收一个整数参数  
void fun(int i) {
	cout << "打印整数: " << i << endl;
}

// 函数2 : 接收两个整数参数  
void fun(int i, int j) {
	cout << "打印两个整数: " << i << " 和 " << j << endl;
}

// 函数3 : 接收一个浮点数参数  
void fun(float f) {
	cout << "打印浮点数: " << f <<endl;
}

int main()
{
	fun(4);				// 调用第一个 fun 函数  
	fun(2, 3);			// 调用第二个 fun 函数  
	fun(1.5f);          // 调用第三个 fun 函数  


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
    return 0;
}

执行结果 :

打印整数: 4
打印两个整数: 23
打印浮点数: 1.5
Press any key to continue . . .

在这里插入图片描述


2、代码示例 - 返回值不是函数重载判定标准


只有 函数参数 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ;

因此 , 如果两个函数 , 参数列表相同 , 返回值不同 , 此时就会在编译时报错 , 程序无法运行 ;


定义了 函数 1 , void fun(int i) , 接收一个整数 int 类型参数 , 返回 void 返回值 ;

// 函数1 : 接收一个整数参数 , 返回 void 空
void fun(int i) {
	cout << "打印整数: " << i << endl;
}

之后 , 再定义 函数 2 , int fun(int i) , 接收一个整数参数 , 返回 int 类型返回值 , 函数 2 直接与 函数 1 发生了冲突 , 编译时 , 会报错 ;

// 函数2 : 接收一个整数参数 , 返回 int 类型返回值 
int fun(int i) {
	cout << "打印整数: " << i << endl;
	return 0;
}

如果使用 IDE 工具 , 如 Visual Studio 2019 , 代码写完就会报错 ;

在这里插入图片描述


错误代码示例 :

// 包含 C++ 头文件
#include "iostream"

// 使用 std 标准命名空间
//		该命名空间中 , 定义了很多标准定义
using namespace std;

// 函数重载示例  

// 函数1 : 接收一个整数参数 , 返回 void 空
void fun(int i) {
	cout << "打印整数: " << i << endl;
}

// 函数2 : 接收一个整数参数 , 返回 int 类型返回值 
int fun(int i) {
	cout << "打印整数: " << i << endl;
	return 0;
}

int main()
{


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
    return 0;
}

执行结果 :

已启动生成…
1>------ 已启动生成: 项目: HelloWorld, 配置: Debug Win32 ------
1>hello_world.cpp
1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp(16,16): error C2556:int fun(int): 重载函数与“void fun(int)”只是在返回类型上不同
1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp(11): message : 参见“fun”的声明
1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp(16,5): error C2371: “fun”: 重定义;不同的基类型
1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp(11): message : 参见“fun”的声明
1>已完成生成项目“HelloWorld.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0==========

在这里插入图片描述

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

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

相关文章

Pandas常用指令

astype astype的作用是转换数据类型&#xff0c;astype是没办法直接在原df上进行修改的&#xff0c;只能通过赋值的形式将原有的df进行覆盖&#xff0c;即df df.astype(dtype) astype的基本语法 DataFrame.astype(dtype, copyTrue, errorsraise) dtype参数指定将数据类型转换…

Pytorch从零开始实战01

Pytorch从零开始实战——MNIST手写数字识别 文章目录 Pytorch从零开始实战——MNIST手写数字识别环境准备数据集模型选择模型训练可视化展示 环境准备 本系列基于Jupyter notebook&#xff0c;使用Python3.7.12&#xff0c;Pytorch1.7.0cu110&#xff0c;torchvision0.8.0&…

Python综合案例(动态柱状图)

一、基础柱状图 基本代码&#xff1a; """ 演示基础柱状图的开发 """ from pyecharts.charts import Bar from pyecharts.options import LabelOpts # 使用Bar构建基础柱状图 bar Bar() # 添加x轴的数据 bar.add_xaxis(["中国", &q…

谷歌浏览器打开白屏 后台还有还有很多google chrome进程在运行

环境&#xff1a; Win10 专业版 谷歌浏览器 版本 116.0.5845.141&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; L盾加密终端 问题描述&#xff1a; 谷歌浏览器打开白屏 后台还有还有很多google chrome进程在运行&#xff0c;要全部结束谷歌浏览器进程&…

pear admin 新增模块流程

pear admin 新增模块流程 一、界面新增模块二、增加路由情况三、增加前端页面四、增加db Module配置 一、界面新增模块 增加主菜单 增加子菜单 对应底层表&#xff1a;rt_power 二、增加路由情况 增加路由代码 from flask import render_template from common.utils.righ…

如何实现24/7客户服务自动化?

传统的客服制胜与否的法宝在于人&#xff0c;互联网时代&#xff0c;对于产品线广的大型企业来说&#xff1a;单靠人力&#xff0c;成本大且效率低&#xff0c;相对于产品相对单一的中小型企业来说&#xff1a;建设传统客服系统的成本难以承受&#xff0c;企业客户服务的转型已…

计算机网络初识

目录 1、计算机网络背景 网络发展 认识 "协议" 2、网络协议初识 OSI七层模型 TCP/IP五层(或四层)模型 3、网络传输基本流程 网络传输流程图 数据包封装和分用 4、网络中的地址管理 认识IP地址 认识MAC地址 1、计算机网络背景 网络发展 在之前呢&…

尼康D90使用心得

文章目录 规格参数快速指南相机机身模式拨盘控制面板取景器拍摄信息展示 核心功能指令拨盘拍摄模式自动模式场景模式快门速度和光圈 固件、软件、驱动升级更多细节参考 规格参数 型号尼康D90发布日期2008年08月机身特性APS-C规格数码单反产品定位中端单反传感器类型CMOS传感器…

Redis Redis的数据结构 - 通用命令 - String类型命令 - Hash类型命令

目录 Redis的数据结构&#xff1a; Redis命令&#xff1a; 通用命令&#xff1a;&#xff08;通用指令是部分数据类型的&#xff0c;都可以使用的指令&#xff09; KEYS查询命令&#xff1a; DEL删除命令&#xff1a; EXISTS判断命令&#xff1a; EXPIPE有效期设置命令&…

Ubuntu系统安装JDK1.8(附网盘链接)

这里写目录标题 1.下载JDK&#xff1a;2.将压缩包上传至服务器&#xff1a;3.安装JDK&#xff1a;4.配置环境变量&#xff1a;5.配置生效&#xff1a;6.检查JDK版本&#xff1a; 1.下载JDK&#xff1a; 方式一&#xff1a;[官网链接](https://www.oracle.com/java/technologie…

vue3+vant4封装日期时间组件(年月日时分秒)

vant4目前无法直接使用vant3自带的年月日时分秒组件&#xff0c;综合考虑下&#xff0c;决定自己封装一个&#xff01; vue3vant4封装日期时间组件&#xff08;年月日时分秒&#xff09; 效果图代码片段核心组件代码引入 效果图 代码片段 核心组件代码 <template><!…

软件评测师之码制

目录 一、机器数二、码制三、数的表示范围 一、机器数 机器数就是一个数在计算机中的二进制表示&#xff0c;计算机中机器数的最高位是符号位&#xff0c;正数符号位为0&#xff0c;负数符号位为1&#xff0c;机器数包含原码、反码和补码三种表示形式。 二、码制 表现形式数…

Flink基础

Flink architecture job manager is master task managers are workers task slot is a unit of resource in cluster, number of slot is equal to number of cores(超线程则slot2*cores), slot一组内存一些线程共享CPU when starting a cluster,job manager will allocate a …

【个人博客系统网站】我的博客列表页 · 增删改我的博文 · 退出登录 · 博客详情页 · 多线程应用

【JavaEE】进阶 个人博客系统&#xff08;4&#xff09; 文章目录 【JavaEE】进阶 个人博客系统&#xff08;4&#xff09;1. 增加博文1.1 预期效果1.1 约定前后端交互接口1.2 后端代码1.3 前端代码1.4 测试 2. 我的博客列表页2.1 期待效果2.2 显示用户信息以及博客信息2.2.1…

文件能做二维码吗?多种文件格式在线转二维码

怎么把文件做成二维码&#xff1f;在使用电脑办公时&#xff0c;必不可少的经常会使用word、excel、ppt等文件格式&#xff0c;那么当需要将文件生成二维码使用时&#xff0c;如何操作才能快速制作二维码呢&#xff1f;可以使用二维码生成器来在线制作二维码&#xff0c;与使用…

知识储备--基础算法篇-子串

1.子串 1.1第560题-和为k的子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的连续子数组的个数 。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2 一开始想用滑动窗口&#xff0c;但是在运行过程中碰…

定时任务管理器(xxl-job)

文章目录 xxl-job简介安装使用拉取xxl-job项目导入数据库表启动 admin 服务端Spring Boot 整合 xxl-job修改执行器新建定时任务 xxl-job简介 XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。开箱即用。 admin &#xff1a;…

uni-app 可视化创建的项目 移动端安装调试插件vconsole

可视化创建的项目&#xff0c;在插件市场找不到vconsole插件了。 又不好npm install vconsole 换个思路&#xff0c;先创建一个cli脚手架脚手架的uni-app项目&#xff0c;然后再此项目上安装vconsole cli脚手架创建uni-app项目 安装插件 项目Terminal运行命令&#xff1a;npm…

商城开发:店铺管理系统应具备哪些功能?

电子商务的迅猛发展&#xff0c;越来越多的企业选择在线商城作为业务拓展的重要渠道。而要实现一个成功的在线商城&#xff0c;一个强大而高效的店铺管理系统是不可或缺的。店铺管理系统作为商城的核心管理工具&#xff0c;应具备一系列功能&#xff0c;以提供卓越的用户体验和…

游戏海外运营需要准备什么?

游戏海外运营需要充分的准备和计划&#xff0c;以确保游戏在目标市场中取得成功。以下是一些游戏海外运营需要准备的关键方面。 游戏平台 游戏出海必不可少的就是游戏平台&#xff0c;而且要注意的是&#xff0c;海外游戏平台的搭建和国内有所不同&#xff0c;对于支付方式和语…