首页 > 其他分享 >什么是函数重载?

什么是函数重载?

时间:2024-12-04 22:31:59浏览次数:9  
标签:函数 int 什么 参数 func 重载 void

函数重载:指的是在同一个作用域内,可以定义多个重名函数,这些函数具有相同的函数名,但它们的参数列表不同。参数列表的不同可以体现在参数的个数,类型,顺序不同。

//1个参数
void func(int a) {
    cout << "a:" << a << endl;
}
//2个参数
void func(int a,int b) {
    cout << "a:" << a <<" "<<"b:"<<b<< endl;
}
//参数类型不同
void func(int a, float b) {
    cout << "a:" << a << " " << "float b:" << b << endl;
}
//参数顺序不同
void func(float a, int b) {//虽然这个函数里面的参数名字a,b和上一个函数相同位置的参数名字相同,但是是不影响
//函数重载的,因为参数名字是不会影响函数重载的
    cout << "float a:" << a << " " << "b:" << b << endl;
}
int main()
{
    func(1);
    func(1,2);
    func(1,0.5f);
    func(0.5f,1);
    return 0;
}
a:1
a : 1 b : 2
a : 1 float b : 0.5
float a : 0.5 b : 1
  1. 参数名字的相同还是不同都是不能判断是函数重载的
void func(int a);
void func(int b); // 错误:与上一个函数重载冲突,因为参数列表相同(都是接受一个int类型的参数)
虽然a和b的名字不同,但是同一个位置的参数名字的不同是不能判断是函数重载的
void func(float a);//是函数重载,因为参数的类型不同
  1. 函数重载与函数返回值无关,当参数相同的时候,返回值不同不是函数重载。当参数不同的时候,返回值相同或者不相同都是函数重载。
  2. 在C语言中,函数是通过函数名来区分的。
  3. 在C++中,函数是通过函数名加上参数列表来区分的,这就允许在同一作用域内定义多个同名但参数不同的函数(即函数重载)。
  4. 函数重载机制使得我们可以根据不同的参数调用相应的函数版本,而无需改变函数名。

函数重载和参数默认值的冲突

如果有一个函数重载版本具有默认参数值,而另一个重载版本与该版本在参数数量上仅相差一个默认参数,那么当调用函数并仅提供与具有默认参数值的函数相同数量的参数时,编译器将无法确定应该调用哪个函数。

void func(int a) {
    cout << "a:" << a << endl;
}

void func(int a, int b = 20) {
    cout << "a:" << a << " b:" << b << endl;
}
int main()
{
    func(10);//会报错
    return 0;
}
当调用func(10);时,编译器无法确定应该调用哪个func函数,
因为两个函数都可以接受一个整数参数(第二个函数可以将第二个参数视为使用了默认值)。这将导致编译错误。

解决方法

  1. 避免为重载函数的参数设置默认值:最简单的方法是避免为重载函数的参数设置默认值。这样可以确保每个重载函数都具有唯一的参数列表,从而消除冲突。
  2. 使用不同的函数名:如果必须为某些参数设置默认值,并且这些参数与重载函数的参数列表存在冲突,那么可以考虑使用不同的函数名来区分这些函数。
  3. 重新设计函数接口:如果冲突无法避免,并且上述方法都不适用,那么可能需要重新设计函数接口。这包括更改参数的类型、数量或顺序,或者引入新的函数来替代现有的重载函数。

标签:函数,int,什么,参数,func,重载,void
From: https://blog.csdn.net/A687479A/article/details/144191793

相关文章

  • 学习Python的笔记10--函数进阶
    1、变量作用域定义:变量生效的范围,主要分为两类:局部变量和全局变量。1、局部变量定义:函数体内部的变量,只在函数体内部生效。deftestA():a=100print(a)testA()#100print(a)#报错:name'a'isnotdefined变量a是定义在testA函数内部的变量,在函数外部访问则立即报......
  • 学习Python的笔记11--函数加强
    1、 lambda表达式1、语法:lambda参数列表:表达式注意:1、lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用。2、lambda表达式能接收任何数量的参数但只能返回一个表达式的值。3、直接打印lambda表达式,输出的是此lambda的内存地址#需求:函数返回值100#1.函......
  • 方法和方法重载
    方法方法是指对象可以执行的特定操作或行为。它是面向对象编程中的基本构建块之一。方法通常与特定的数据结构(如类或对象)相关联,用于实现对数据的操作,比如读取、修改或计算等。方法的主要特点包括:封装性:方法将执行特定任务的代码封装起来,外部调用者无需关心内部实现细节。复......
  • 新能源汽车OTA过程中,为什么需要不断监测热失控,如何实现
    一、热失控概念以及危害新能源热失控是指新能源汽车的动力电池在使用过程中,由于各种原因导致温度急剧上升且失去控制的现象.以下是具体介绍:热失控的原因电池内部因素:电极材料问题:电池电极材料在充放电过程中可能会发生结构变化或副反应,例如锂离子电池中,阳极可能会产......
  • SQL-函数 - 聚合函数
    在SQL中,聚合函数是一类用于对数据集进行汇总计算的特殊函数。它们可以对一组数据执行诸如计数、求和、平均值、最大值和最小值等操作。聚合函数通常在SELECT语句中配合GROUPBY子句使用,用于对分组后的数据进行汇总分析。常见的聚合函数包括:COUNT:计算指定列的行数或非空......
  • SQL-函数 - 时间函数
    在SQL中,时间函数是用于处理日期和时间的特殊函数。它们允许我们在查询中操作和处理日期、时间、日期时间数据,从而使得在数据库中进行时间相关的操作变得更加方便和灵活。常用的时间函数有:DATE:获取当前日期DATETIME:获取当前日期时间TIME:获取当前时间示例假设有一个订单表o......
  • 匿名函数与递归函数
    '''匿名函数:官方定义,不推荐所有人使用的一种方式,但是官方支持该语法。即懒人版的函数。只有极少数情况下会选择使用该方法。匿名函数就是基于lambda关键字来实现的'''#匿名函数示例#a=lambdab:b+100#定义了一个匿名函数,要求传入一个参数b,执行了b+100......
  • Day3 [Python学习] 数据类型:数字;整型、浮点型、str()函数
    数学里边的数分为整数和小数,python语言中同样1.整型1.1赋值eg:建立一个名为age_a的变量,给它赋值1。此时控制台输出的1是整型,而不是字符串类型age_a=1print(age_a)1.2运算可对其执行加(+)减(-)乘(*)除(/)运算age_a=3age_b=27age_c=12age_d=40print(age_a......
  • 函数
    '''函数:可以重复使用的实现某种功能的代码块。通过函数可以降低代码的冗余,提升代码的可维护性,提升代码复用性,简化代码内容python中已经封装了大量函数,自行封装函数时避免与系统自带函数重名。函数的定义与调用:函数的定义def函数名称(参数1,参数2,。。。。参数n......
  • 随笔-bpftrace-堆栈不显示函数名|显示unknown(How to print the function name instea
    link:Howtoprintthefunctionnameinsteadoftheaddressforustack#3108ajor:Symbolicationisbasedoffthesymboltableofthetargetapplication.Itdoesn'tlooklikeyou'redoinganythingwrongtome,butyoucoulddoublecheckthatsym......