【C/C++】详解 函数重载和应用

news/2024/11/8 6:47:33/

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述

c语言内容💖:

专栏:c语言之路重点知识整合

【c语言】全部知识点总结


目录

  • 一、概念
  • 二、用法
    • 有函数参数默认值的函数重载
  • 不构成函数重载的例子
  • 总结

一、概念

函数重载是指 在同一个作用域下函数名相同,参数列表不同(类型、数量、顺序),返回值类型无所谓 的函数

重载的函数在调用时,编译器可以根据实参自动去匹配对应的函数

在这里插入图片描述

二、用法

根据函数重载的定义,定义一组函数:

他们函数名相同,但是返回值和参数列表都不同

int add(int a, int b)
{return a + b;
}
double add(double a, double b)
{return a + b;
}

这两个函数就构成了函数重载,在主函数中可以直接调用add函数进行加法计算,编译器会根据参数列表的不同自动匹配不同的函数(根据int型参数匹配int add函数,根据double类型参数匹配double add函数

int main()
{cout << add(1, 2) << endl;cout << add(1.1, 1.2) <<endl;return 0;
}

选中第一条add(1, 2)语句,可以看到匹配了int add函数

在这里插入图片描述

选中第二条add(1.1, 1.2)语句,就匹配了double add函数

在这里插入图片描述

输出结果:

在这里插入图片描述

以下是一些函数重载的例子

void fun(int a)
{cout << __FUNCSIG__ << endl;
}
void fun(char a, int b)
{cout << __FUNCSIG__ << endl;
}
void fun(int a,char b) {cout << __FUNCSIG__ << endl;
}

在学过【C/C++】函数参数默认值 的知识后,我们再来研究一下有函数参数默认值的函数重载:

有函数参数默认值的函数重载

void fun(int a)
{cout << __FUNCSIG__ << endl;
}
void fun(int a,char b) {cout << __FUNCSIG__ << endl;
}//对上面的函数指定一个默认值:
void fun(int a, char b='b')
{cout << __FUNCSIG__ << endl;
}
int main()
{fun(7,x);return 0;
}

如果给void fun函数中的参数b指定默认值:char b='b'

此时的void fun(int a, char b='b')函数与void fun(int a,char b)函数构成函数重载吗?还是与void fun(int a)函数构成函数重载?

通过运行可以查看到错误为 函数“void fun(int,char)”已有主体,因此void fun(int a, char b='b')函数与void fun(int a,char b)并不构成函数重载,他们的参数列表和返回值都相同!

在这里插入图片描述


如果是void fun(int a)函数与void fun(int a, char b='b')函数呢?构成重载吗?

初步思考🤔,这两个函数参数列表好像不同,只是这两个函数与调用时的参数列表匹配
void fun(int a)
{cout << __FUNCSIG__ << endl;
}
void fun(int a, char b='b')
{cout << __FUNCSIG__ << endl;
}
int main()
{fun(7);return 0;
}

此时运行查看:错误为C2668 “fun”: 对重载函数的调用不明确,看来他们构成了函数重载,只是调用不明确,如何对某一个函数明确调用呢?

在这里插入图片描述

类比局部变量声明,函数也可以进行局部函数声明!

只需要在主函数中进行局部函数声明,使用{ }指定在某段代码块中使用该函数

比如,我现在要使用void fun(int a)函数

void fun(int a)
{cout << __FUNCSIG__ << endl;
}
void fun(int a, char b='b')
{cout << __FUNCSIG__ << endl;
}
int main()
{{//函数局部声明void fun(int a);fun(7);	//void __cdecl fun(int)}return 0;
}

在这里插入图片描述

如果同时需要在主函数中使用void fun(int a)void fun(int a, char b='b')这两个函数

只需要在不同的位置都进行函数声明,使用{ }分隔开

void fun(int a)
{cout << __FUNCSIG__ << endl;
}
void fun(int a, char b='b')
{cout << __FUNCSIG__ << endl;
}
int main()
{//.....{//函数局部声明void fun(int a);fun(7);	//void __cdecl fun(int)}//.....{//函数局部声明void fun(int a, char b = 'b');fun(7);	//void __cdecl fun(int,char)}return 0;
}

在这里插入图片描述

这样就在同一个主函数中使用了 在指定函数参数默认值后导致参数列表相同重载函数

不构成函数重载的例子

*pp[]都是地址p,参数列表相同,不构成函数重载

void fun(int* p)
{//...
}
void fun(int p[])
{//...
}

charconst char 相同,类型和常量修饰符都相同,认为是相同的函数签名,不构成函数重载

void fun(char a)
{//...
}
void fun(const char a)
{//...
}

(错误原因都是函数已有主体,也就是函数重定义)

在这里插入图片描述

在学过函数参数默认值的函数重载后,上面的代码可以改成如下,就构成了函数重载

void fun(const char a, int b = 0) 
{//...
}

总结

函数重载是指 在同一个作用域下函数名相同,参数列表不同(类型、数量、顺序),返回类型可同可不同 的函数

  • 重载的函数在调用时,编译器可以根据实参自动去匹配对应的函数

  • 对于指定函数参数默认值后导致参数列表相同的重载函数,主函数调用时只需要对要调用的函数进行局部函数声明

  • 函数重载可以提高代码的可读性,使得代码更加清晰明了


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

http://www.ppmy.cn/news/332416.html

相关文章

DIY钢铁侠电动开合

有需要教学的部分留言 软件教程1&#xff1a;眼灯控制小熊派bearpi-HM-nano&#xff08;hi3861鸿蒙LiteOS&#xff09;点亮WS2812灯板&#xff08;spi方式&#xff09;_mialo163的博客-CSDN博客软件教程2&#xff1a;驱动舵机 待更新 软件教程2&#xff1a;无线控制 待更新

《硅谷钢铁侠》---- 读书笔记

目录 第一章 马斯克的世界&#xff1a;跨领域创造第二章 出生地非洲&#xff1a;冒险无极限的基因第三章 挺进加拿大&#xff1a;追寻太阳的人第四章 第一次创业&#xff1a;征服网络世界第五章 PayPal黑帮大佬&#xff1a;发动国际金融革命第六章 太空召唤&#xff1a;建立Spa…

钢铁侠马斯克,当上了美国院士

美国国家工程院&#xff08;NAE&#xff09;院士名单公布了&#xff01; 谁知道&#xff0c;「狂人」马斯克也入选了&#xff0c;头衔1&#xff0c;我们以后得称他「马院士」。 马斯克发文表示&#xff0c;「非常感激&#xff01;」 此外&#xff0c;22名当选的海外院士中&…

航空母舰与钢铁侠助阵,这么硬核的智能锁你见过么

当威风凛凛的航空母舰映入眼帘&#xff1b;当帅气逼人的钢铁侠亮相现场&#xff0c;你肯定也会和我一样发出由衷的惊叹声。 不过大家不要误会&#xff0c;这可不是漫威又一部电影大片的拍摄现场&#xff0c;而是鹿客智能锁举办的一场新品发布会。 5月21日&#xff0c;鹿客在天津…

钢铁侠与现实生活的结合。

一天时间&#xff0c;把钢铁侠从第一步看到第三部。 我个人看到的是&#xff0c;钢铁侠一次一次的升级&#xff0c;从能源来说&#xff0c;从钯元素升级到最新的新元素&#xff0c;历经了革命性的突破。一点一滴&#xff0c;引人入胜。 从开始的一个简陋的钢铁机器人&#xf…

硅谷钢铁侠--Elon Musk

简介主要成就 Zip2XcomPayPalSpaceXTeslaSolarCityHyperLoop 评价 简介: 埃隆马斯克&#xff08;Elon Musk&#xff09;&#xff0c;1971年6月28日出生于南非的行政首都比勒陀利亚&#xff0c;拥有加拿大和美国双重国籍&#xff0c;企业家、工程师、慈善家&#xff0c;现担任…

《硅谷钢铁侠》与埃隆.马斯克

今天在樊登读书会听了一本书&#xff0c;名字叫《硅谷钢铁侠》。起初以为是科幻类的书籍&#xff0c;没想到是讲述埃隆.马斯克的&#xff0c;这是我第一次真正的了解他。我认为他是一个疯子、偏执狂、极客&#xff0c;同时他又是一位真正的创新者与实干家&#xff0c;我无比的佩…