首页 > 其他分享 >用最简单的方式理解函数重载

用最简单的方式理解函数重载

时间:2024-06-13 19:33:33浏览次数:11  
标签:函数 int C++ fun 理解 参数 重载

一、什么是函数重载

函数重载的定义:在同一个作用域内,使用不同的函数名,实现不同的函数功能,而且编译器不会发生报错的情况。

函数重载的条件以及注意事项:

1、在同一个作用域内

2、相同的函数名.

3、函数参数的个数、顺序、类型不同

4、函数重载与返回值无关

二、函数重载发生的原因

函数被创建之后,函数名会被储存在计算机中,以便于在CPU执行命令时,能够接收指令并调用已经创建好的函数。那么函数是以什么样的方式存储在计算机中的呢?

1、C和C++是否都能发生函数重载

答案是显而易见的:C语言是不能发生函数重载的,而C++是可以发生函数重载的。

这是因为编译器对于两种语言中函数的存储方式是不一样的(下文将详细讲述)

2、为什么C++中可以发生函数重载

在C++中:

#include<iostream>
using namespace std;
void fun(int a){cout<<"okk"<<endl;}
void fun(int a,int b){cout<<"okk"<<endl;}
void fun(float a){cout<<"okk"<<endl;}
void fun(int a,float b){cout<<"okk"<<endl;}
void fun(float b,int a){cout<<"okk"<<endl;}

以上代码展示了在C++中,发生函数重载的情况。

我们可以看到新定义的5个函数都采用了“fun”这个函数名;

下面我们将进行逐个分析:

void fun(int a){cout<<"okk"<<endl;}
void fun(int a,int b){cout<<"okk"<<endl;}

上述代码表示,函数重载的条件:

参数的个数不同;

在fun(int a, int b)中,含有a 和 b两个整形的参数,而fun(int a)中,只有a这一个整形参数,因此参数的个数不同可以发生函数重载。

void fun(int a){cout<<"okk"<<endl;}
void fun(float a){cout<<"okk"<<endl;}

上述代码表示,函数重载的条件:

参数的类型不同;

在fun(int a)中,含有a 一个整形的参数,而fun(float a)中,只有a这一个浮点型参数,因此参数的类型不同可以发生函数重载。

void fun(int a,float b){cout<<"okk"<<endl;}
void fun(float b,int a){cout<<"okk"<<endl;}

上述代码表示,函数重载的条件:

参数的顺序不同;

在fun(int a,float b)中,先后含有a 一个整形的参数,和b这个浮点型参数,而fun(float b,int a)中,先后含有b 一个浮点形的参数,和a这个整型参数,因此参数的顺序不同可以发生函数重载。

我们刚刚进行了函数重载条件的探讨,接下来我们来讨论一下,为什么在C++中能进行函数重载。

三、函数重载为什么能够发生

1、C语言中的函数在编译器中的记录方式

void fun()
{
    int a=1;
    printf("%d",a);
}

  以上函数是在C语言中进行创建的,在编译器中会被记录为:fun()

所以无论如何改变函数的参数,在编译器中都会被记录为fun()

因此在C语言中,无法进行函数重载

2、C++中的函数在编译器中的记录方式

void fun(int a,int b){
    
}
void fun(int a){

}

以上函数是在C++中进行创建的,其在编译器中的记录方式分别为:

fun() i i     和      fun() i 

由此可知,在C++中,函数的记录方式和参数是息息相关的

由此可知,在C++中可以发生函数重载,在C中不能发生函数重载是由于函数的记录方式不同;

标签:函数,int,C++,fun,理解,参数,重载
From: https://blog.csdn.net/s386199/article/details/139660978

相关文章

  • 单细胞RNA测序(scRNA-seq) 理解Seurat对象存储信息含义和基本操作
    单细胞测序技术是在单个细胞水平上,对基因组、转录组和表观基因组水平进行分析测序技术。bulkRNA-seq获得的是组织或器官等大量细胞中表达信号的均值,无法获取细胞之间的差异信息(即丢失了细胞的异质性),而单细胞测序技术可以很好的弥补bulkRNA-seq这一不足,即获取混合样本中......
  • hive函数学习
    复制粘贴到MD文档中查看更方便Hive函数学习目录Hive函数学习SQL练习Hive常用函数关系运算数值计算条件函数(主要使用场景是数据清洗的过程中使用,有些构建表的过程也是需要的)日期函数重点!!!字符串函数Hive中的wordCount1.1 Hive窗口函数1.1.1 聚合开窗函数聚合开窗函数实战:实战1......
  • 函数递归(详解)
    一、什么是递归在C语言中,递归就是函数自己调用自己上面这个就是一个简单的递归,但是代码最终也会陷入死循环,导致栈溢出。 二、递归的举例1.求n的阶乘我们知道的n的阶乘的公式为:n!=n*(n-1)!根据函数可令n==0时,n的阶乘为1,其余的用上面公式计算2.顺序的打印整数的每一位......
  • C# OpenCvSharp Mat操作-操作符重载
    在C#中使用OpenCvSharp进行图像处理时,操作符重载可以使代码更加简洁和直观。下面是对每个操作符的详细解释及示例代码。“+”运算符作用或原理:+运算符可以在Mat与Mat之间进行,也可以在Mat和一个数字之间进行加运算。使用加运算可以改变图像亮度,也可以实现两幅图像......
  • 【最新鸿蒙应用开发】——持久化的理解
    应用数据持久化1.概述应用数据持久化,是指应用将内存中的数据通过文件或数据库的形式保存到设备上。内存中的数据形态通常是任意的数据结构或数据对象,存储介质上的数据形态可能是文本、数据库、二进制文件等。2.分类OpenHarmony标准系统支持典型的存储数据形态,包括用户首......
  • 面试官:谈谈对SpringAI的理解?
    SpringAI已经发布了好长时间了,目前已经更新到1.0版本了,所以身为Java程序员的你,如果还对SpringAI一点都不了解的话,那就有点太落伍了。言归正传,那什么是SpringAI?如何快速进行SpringAI开发呢?1.什么是SpringAI?SpringAI是Spring官方社区项目,旨在简化JavaAI应......
  • c++定义了类在main函数中使用的一个坑现象的解决,让我理解了栈,堆和内存之间关系。
    首先描述一下我的坑是啥?我的坑就是写了一个对集料颗粒进行角度计算的类,在main函数中使用采用了类定义申明,这样使用导致一个坑,这个类中对于集料的数目进行了宏定义,发现数据如果超过20个,编译就报错,当时没有太在意这个坑,没有思考什么原因。也就将就者用了。后来对接同事说,这个颗粒数......
  • YOLOv5改进 | 损失函数 | EIoU、SIoU、WIoU、DIoU、FocusIoU等多种损失函数
    ......
  • 【AI原理解析】— Gemma2模型
    目录一、模型概述二、模型设计结构上下文大小参数优化参数规模性能优化开放式模型跨平台兼容性三、技术细节Multi-QueryAttentionRoPEEmbeddingsGeGLUActivationsNormalizerLocation模型结构训练数据优化方法四、训练与优化训练硬件训练策略模型评估......
  • 【C++面向对象】重载操作符
    C++将运算符重载扩展到自定义的数据类型,它可以让对象操作更美观。例如字符串string用加号(+)拼接、cout用两个左尖括号(<<)输出。运算符重载函数的语法:返回值operator运算符(参数列表);运算符重载函数的返回值类型要与运算符本身的含义一致。非成员函数版本的重载运算符函数:形......