C++浅析函数重载是什么

 更新时间:2022年08月12日 16:21:02   作者:智者不如爱河  
C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading),借助重载,一个函数名可以有多种用途

前言

这是一个非常重要的点

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数。

这些同名函数的 形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题

或者说,给一个名字赋予第二层意义,一词多义,有点内涵那意思

函数重载

首先C语言不允许定义同名的函数,但是C++可以,原因就涉及到了函数重载

函数重载的要求:函数名相同,参数不同(参数类型不同,参数个数不同)

例子:

定义三个函数名相同的函数,在C++中可以构成函数重载

这三个函数的函数名一样,但是类型不同

int ADD(int left, int right) {
	return left + right;
}
double ADD(double left, double right) {
	return left + right;
}
long ADD(long left, long right) {
	return left + right;
}

它们的类型分别是int,double,long。

而且个数不同也能构成函数重载。

下面来打印玩一下(刚开始玩打印很正常,但是工作中很少用)

int main(void) {
	cout << ADD(1,2) << endl;
	cout << ADD(1.2, 2.2) << endl;
	cout << ADD(40l, 40l) << endl;
	return 0;
}

结果:

感觉是调用的是一个函数,但其实不止一个,因为这个函数被重载了,所以有三层定义。

实际上调用的是

1:int类型的

2:double类型的

3:long类型的。

一些其他问题

缺省算不算重载 ?

//NO.1
int ADD(int left, int right) {
	return left + right;
}
//NO.2
int ADD(int left = 1, int right = 2) {
	return left + right;
}

注意 : NO.1和NO.2两个不算重载,因为构成重载的条件是参数的类型不同或者个数不同,以上均不满足 。重载只看类型

但是

//NO.2
int ADD(int left = 1, int right = 2) {
	return left + right;
}
//NO.3
double ADD(double left, double right) {
	return left + right;
}

NO.2和NO.3是构成重载的,因为满足了重载的条件

函数重载的要求:函数名相同,参数不同(参数类型不同,参数个数不同)

综上所述,缺省和重载没有关系!

2.1 int和char怎么区分

int ADD(int left = 10, int right = 20) {
	return left + right;
}
char ADD(char left, char right) {
	return left + right;
}
int main() {
	cout << ADD() << endl;
	//cout << ADD(1,2) << endl;	//(1,2)字面量常量,
	//默认给十进制,十六进制等等,给的整形默认算常量
	//如果调用char
	cout << ADD('1', '2') << endl;	//char类型打印,自动按%c,字符类型→	→	→	→	→	↓
	//传字符才调用char类型的																↓
	//																					↓
	//char类型的字符只是显示表面,深入剖析的话在内存中,它存储在4byte中,是它对应的ASCII码值	↓
	//ASCII码值还是整形,只不过是1byte													↓
	//char类型存的值是‘49',‘50'.	←	←	←	←	←	←	←	←	←	←	←	←	←	←		
	//对应的是c。c在ASCII码值中是99	←	←	←	←	←	←	←	←	←	←	←	←	←	←
	return 0;
}

总结:

1.char和int都是表示整形的,整形一般都是用来表示大小,只不过int是4byte,char是1byte

2.char的1byte是用来表示ASCII码值的字母,多个字母可以表示英文,就能表示文字了

2.2 传值

有三个值,但是缺省了一个,传的时候只传了两个

void lost(int a, int b, int c = 1) {
}
void lost(int a, int b) {
}
//以上构成函数重载,函数名相同,参数或者个数不同 
int main() {
	lost(1, 2, 3);
	lost(1,2);
	//↑是编不过去的,
	return 0;
}

总结:

1. 有多个重载函数“lost”实例与参数列表匹配

2. 编译器不能识别要调用哪一个“lost”对重载函数的调用不明确

3. 构成重载但是调用的时候埋了一个坑

到此这篇关于C++浅析函数重载是什么的文章就介绍到这了,更多相关C++函数重载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解C语言中的常量指针和指针常量

    详解C语言中的常量指针和指针常量

    这篇文章主要介绍了详解C语言中的常量指针和指针常量,包括其之间的区别是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • C++编程中的命名空间基本知识讲解

    C++编程中的命名空间基本知识讲解

    这篇文章主要介绍了C++编程中的命名空间基本知识讲解,包括对C++11中内联命名空间新特性的介绍,需要的朋友可以参考下
    2016-01-01
  • C语言面试C++字符串替换空格示例

    C语言面试C++字符串替换空格示例

    这篇文章主要介绍了C语言面试中C++字符串替换空格示例,文中给出了基本上可以拿下offer的代码,有需要的朋友可以借鉴参考下,希望大家都能早日拿到心仪的offer
    2021-09-09
  • C++引用和指针的区别你知道吗

    C++引用和指针的区别你知道吗

    这篇文章主要为大家介绍了C++引用和指针的区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助<BR>
    2022-01-01
  • Opencv使用Stitcher类图像拼接生成全景图像

    Opencv使用Stitcher类图像拼接生成全景图像

    这篇文章主要为大家详细介绍了Opencv使用Stitcher类图像拼接生成全景图像,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 深入解读C++ 内联函数inline|nullptr

    深入解读C++ 内联函数inline|nullptr

    内联函数:用** inline 修饰的函数叫做内联函数,编译时C++编译器会在调用的地方展开内联函数**,这样调用内联函数就需要创建栈桢,就提高效率了,这篇文章给大家介绍C++ 内联函数inline|nullptr的相关知识,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • C语言中main函数与命令行参数详细讲解

    C语言中main函数与命令行参数详细讲解

    这篇文章主要为大家详细介绍了C语言main()函数与命令行参数问题,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-04-04
  • C++超详细讲解auto与nullptr的使用

    C++超详细讲解auto与nullptr的使用

    C++11提供了nullptr用来取代0或者NULL。在C++11之前,使用NULL为空指针赋初值,但NULL其实就是0,这时会把NULL当成0来用;在C++11中,我们在声明一个变量或对象,指定它的类型时,可以不使用变量本身的类型而使用auto替代
    2022-05-05
  • C++虚析构函数的使用分析

    C++虚析构函数的使用分析

    本篇文章是对C++虚析构函数的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言经典指针笔试题详解

    C语言经典指针笔试题详解

    今天博主来讲解4道经典的指针笔试题,很多朋友没有深刻理解函数传参知识都会在这些题目上出错,下面话不多说,我们开始
    2021-10-10

最新评论