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

news/2025/1/15 15:06:36/

本系列 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.ppmy.cn/news/95823.html

相关文章

第十四届全国大学生数学竞赛决赛(非数类)游记+答案解析

2023/5/27 20:08:今天早上9:00~12:00考了数学竞赛国赛。广州是真的热啊!西安才17度,还下着小雨,到广州之后那个艳阳直接给我人干废了,去酒店的路上步行了20分钟真的要死了已经。 拿到卷子的我是崩溃的,用正…

云计算:优势与未来趋势

文章目录 前言一、云计算的优势1. 降低IT成本2. 提高工作效率3. 提高业务的可靠性和稳定性4. 提升安全性 二、未来发展趋势1. AI与云计算的融合2. 边缘计算的发展3. 多云的趋势4. 服务器和存储的创新 三、 行业应用案例1.金融行业2.医疗保健行业3.教育行业4.零售和物流行业 四、…

Springboot +spring security,方法权限注解

一.简介 这篇文章来讲下Spring Security的方法权限注解。 二.注解介绍 PostAuthorize:在目标方法执行之后进行权限校验PostFilter:在目标方法执行之后对方法的返回结果进行过滤PreAuthorize:在目标方法执行之前进行权限校验。PreFilter:在…

学生端程序(极域电子教室)破解方法

今天信息课上,由于老师的电脑控制(极域电子教室)导致某些同学无法摸鱼,于是他们就想让我破解,这道不难,我也就使用了三四周就破解出来了,今天就来和大家分享一下极域电子教室的破解方法 目录 …

基于JavaWeb的事业单位公务员招考信息发布平台-考务考试报名系统

本文介绍了使用Java技术开发公务员招考信息发布平台的设计与实现过程,首先对实现该系统的技术进行分析,说明选择Java和MySQL数据库的必要性,然后对公务员招考信息发布平台的需求进行分析。并接着对系统进行设计,包括架构设计、功能…

一键启停脚本

在/root 目录下创建bin文件夹再创建你的文件 文件里面写如下命令 #!/bin/bash if [ $# -lt 1 ] then echo "No Args Input..." exit ; fi case $1 in "start") echo " 启动集群 " echo " --------------- 启动 -------…

Linux高性能服务器编程|阅读笔记:第8章 - 高性能服务器程序框架

目录 简介系列笔记8.1 服务器模型8.1.1 C/S模型8.1.2 P2P模型8.2 服务器编程框架8.3 I/O模型8.4 两种高效的事件处理模式8.4.1 Reactor模式8.4.2 Proactor模式8.5 两种高效的并发模式8.5.1 半同步/半异步模式8.5.2 领导者/追随者模式8.6 有限状态机8.7 提高服务器性能的其他建议…

Java09—super,多态

1. super 2. 方法重写 public class Hello{public static void main(String[] args){Person person new Person("zhushuqi", 25);System.out.println(person.say());Student zsq new Student("zsq", 18, "123123", 100);System.out.println(zs…