C++ 学习 ::【基础篇:05】:C++ 函数重载认识及使用、简单介绍:C++ 支持函数重载的原因

news2024/11/28 2:47:50

本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下:

  1. 基础篇类与对象(涉及C++的三大特性等);
  2. STL 篇学习使用 C++ 提供的 STL 相关库
  3. 高阶数据结构与算法篇手动实现自己的 STL 库设计实现高阶数据结构,如 B树、B+树、红黑树等。

学习集:

  • C++ 入门到入土!!!学习合集
  • Linux 从命令到网络再到内核!学习合集

本期内容:C++ 函数重载


目录:
1. 函数重载的认识
2. 函数重载示例
3. 函数重载的注意点说明
4. C++支持函数重载的原理
5. 补充:编译器内函数重载提示


【 C++学习合集链接 】


1. 函数重载的认识

函数重载:是函数的一种特殊情况,C++ 中允许再同一个作用域中声明几个功能相似的同名函数!这些函数的区别在于:形参列表不同!【 参数个数!参数类型!类型顺序!不同!!! 】


2. 函数重载示例

问题引入:若要求实现任意两个同类型值加和并返回结果。
以 int 类型为例:
C 语言中,我们会有如下设计及实现!

int sum(int a, int b){
	return a+b;
}

若此时还要实现其他类型值的加和,我们就需要对 sum 函数名进行一定的标识,以防函数名相同引发错误!(多个函数不同命名,但功能相同,显得十分麻烦)


C++ 中的函数重载完美实现了对该种情况的解决!如下是 C++ 下设计实现的函数!使用一个函数名即可(参数列表不同)

int sum(int a, int b){
	return a+b;
}

float sum(float a, float b){
	return a+b;
}

double sum(double a, double b){
	return a+b;
}

3. 函数重载的注意点说明

  • 从对函数重载的概念中可知,重载的关键区别在于形参列表不同!与函数返回值类型无关!
  • 关于调用:编译器会根据传递的参数进行自动匹配选择!
  • 形参列表不同在于:参数个数、参数类型、参数类型顺序不同!【 与形参名无关! 】(注意如下代码示例)
/* 形参列表的不同:与形参名无关! */
void test(int a, int b);
void test(int b, int a);	/* 错误:不构成重载! */

/* 形参列表:参数个数不同构成重载 */
void test(int, int, int);	/* 正确! */

/* 形参列表:个数相同,类型不同:构成重载 */
void test(int, float);		/* 正确! */

/* 形参列表:个数相同,类型顺序不同:构成重载 */
void test(float, int);

/* 返回值类型不同,不构成重载! */
int test(int, int);			/* 错误! */

4. C++支持函数重载的原理

此处仅作简单的分析!
代码源文件运行起来需要经历以下几个阶段:

  • 预处理、编译、汇编、链接

函数重载这种问题是在链接时会有体现,当函数被调用时,编译器会去查找对应的函数名并进行调用(编译阶段会被用特定的函数名修饰方式进行修饰(C语言函数没有)!)。
函数名的修饰方式有很多,一般而言,修饰以后会用修饰名的后几位来体现函数形参列表的参数类型情况!但是 C 语言中没有,C语言中是直接存储原函数函数名作为查询标识!故 C 语言不支持重载。
【 以下是在 vs 编译器下进行的测试!通过查看反汇编码来查看函数调用时的函数标识 】

在这里插入图片描述

5. 补充:编译器内函数重载提示

在这里插入图片描述


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

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

相关文章

CSS之基础扫盲

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE初阶 目录 文章目录 二、CSS基础语法 2.1 CSS引入方式 2.1.1 内部样式 2.1.2 外部样式 2.1.3 内联样式 2.2 CSS选择器 2.2.1 标签选择器 2.2.2 类选择器 2.2.3 id选择器 2.2.4 通配符选择器 2.2…

HNU-操作系统OS-实验Lab7

OS_Lab7_Experimental report 湖南大学信息科学与工程学院 计科 210X wolf (学号 202108010XXX) 实验目的 理解操作系统的同步互斥的设计实现;理解底层支撑技术:禁用中断、定时器、等待队列;在ucore中理解信号量(semaphore)机制的具体实现;理解管程机制,在ucore内…

动力电池管理系统(BMS)

BMS技术 目录 BMS技术 一、BMS简介 二、BMS主要功能 1、参数检测 2、剩余电量(SOC)估计 3、充放电控制 4、热管理 5、均衡控制 6、故障诊断 7、信息监控 8、参数标定 9、CAN总线接口 三、BMS架构组成 1、BMS的拓扑架构 1、1集中式架构的B…

JavaEE进阶(5/27)Spring Boot

目录 1.认识Spring Boot 2.Spring Boot的优点 3.SpringBoot项目创建 4.resource文件夹 和test文件夹 5.使用一个Spring Boot项目 1.认识Spring Boot Spring Boot 中的Boot 是启动引导的意思 如果Spring相比于普通java开发是从走演变到了汽车,那么Spring boot 相比…

【博客历程】比起方法和技巧,我更想谈质量与坚持

【博客历程】比起方法和技巧,我更想谈质量与坚持 文章目录 【博客历程】比起方法和技巧,我更想谈质量与坚持[toc]我的第一篇博客为什么坚持写博客为什么选择CSDN何为质量未来 还没准备好,等我怎样怎样时再 还在犹豫什么时候开始,…

ssm+springboot+java高校图书馆图书借阅座位预约管理系统系统

陕理工图书馆管理系统包括多个功能模块:图书类别管理模块、图书管理模块、读者管理模块、借阅管理模块、预约管理、推荐管理。管理员登入后,维护图书借阅的信息。本文介绍了使用Java技术开发陕理工图书馆管理系统的设计与实现过程,首先对实现…

微信小程序 java+nodejs+vue美食定制个性化点餐推荐系统

社会的发展和科学技术的进步,互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。手机具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非…

Deathnote

Deathnote 1.主机发现 arp-scan -l2.扫描端口 nmap -Pn -sV -P- -A 192.168.80.132开放了80、22端口 3.访问80端口 修改host文件访问80端口时进行了跳转到deathnote.vuln/wordpress,修改hosts文件,将该域名解析到靶机ip windows hosts文件路径&…

canal server 标准化集群搭建(完结)

4.2. 创建 server 所属集群:选择刚才添加的 “集群名称” server 名称: server_1、server_2、server_3 依次类推 server ip:server 的 ip 地址 admin 端口:canal server 与 canal admin 的通信端口,非生产环境从 2…

Android 12.0Launcher3 电话和短信app图标显示未读短信和未接来电的条数

1.概述 在12.0产品开发中,最近客户有需求要求在电话app图标显示未接来电的条数 在短信app图标上显示未读信息的条数 根据需求首选要在Launcher3的Launcher.java中,启动launcher时,查询未读短信和未接来电 在有未接来电时,更新未接来电的数量 在有未读短信时,更新未读短信的…

基于html+css的图展示95

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

C++内存空间

1.内存空间 在 C 中,内存分为内核空间和用户空间,内核空间由操作系统管理,程序员写的程序在用户空间。 程序运行时,内存主要分成四个区,分别是栈、堆、数据段和代码段。 栈:存储局部变量、函数参数和返回…

今日餐饮美食推荐系统多商家 uniapp+vue微信小程序

此今日美食推荐小程序信息的设计主要有两个用户,会员客户端和管理员服务端两个部分:会员客户主要功能; (1)会员信息:包括:会员注册、会员登录,包括对个人信息进行修改。 &#xff08…

Redis的常用数据结构之哈希类型

首先这里说的哈希类型针对的是redis中的value的k-v结构 常见的操作命令 hset设置值 hsetnx命令,不存在可以设置,存在设置不成功 hget取值,这里与字符串类型不同是要精确到filed。前面的判断也是基于field来实现的 要是field没有就返回null h…

计算机视觉:卷积步长(Stride)

本文重点 我们前面学习了卷积操作,也学习了填充,本节课程我们学习卷积步长,之前我们使用卷积核进行卷积操作都是在图像的左上角开始,从左到右、从上到下每次移动一步,其实移动多少步是可以变化的,这个移动步数称为步长。 什么是步长 卷积操作中的步长(Stride)是指卷…

Qt自定义的ColorDialog--仿QColorDialog

Qt已经有了色板选择,但是它使用QDialog形成的,每次调用基本上都成了点一个按钮,谈一个模态框,选择好颜色之后再关掉模态框。 但是,如果想将颜色选择板放在窗口上,并不会有模态的功能就会比较麻烦&#xff…

【Python GUI编程】零基础也能轻松掌握的学习路线与参考资料

Python GUI编程是指使用Python语言及其相关的GUI框架来开发图形用户界面的程序。学习Python GUI编程需要具备一定的基础知识,如Python语言基础、面向对象编程、GUI编程等。下面给出详细的学习路线和参考资料。 一、Python基础 学习Python GUI编程的第一步需要具备…

代理模式 静态代理 动态代理

代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不应该看到的内容和服务或者添加客户需要的额外服务。 代理模式中的角色: 代理类目标类代理类和目标类的公共接口:客户端在使用代理类时就像在使用目标类&a…

接口加密解决方案:Python的各种加密实现

前言 在现代软件开发中,接口测试已经成为了不可或缺的一部分。随着互联网的普及,越来越多的应用程序都采用了接口作为数据传输的方式。接口测试的目的是确保接口的正确性、稳定性和安全性,从而保障系统的正常运行。 在接口测试中&#xff0…

【C++项目】负载均衡oj

前言: 本篇记录负载均衡oj项目设计的整体思路和部分代码。 负载均衡oj项目基于http网络请求,通过简单的前后端交互:前端的页面编辑已经提交代码,后端控制模块和编译运行的模块分离整合(负载均衡式的选择后端编译运行服…