C++函数重载的细节图文详解

 更新时间:2022年12月10日 09:02:50   作者:是星星鸭  
函数重载即函数名相同,函数形参列表不同(函数特征标不同)的一类函数称为函数重载,下面这篇文章主要给大家介绍了关于C++函数重载的相关资料,需要的朋友可以参考下

前言:如果不想看论证,可以直接点击总结,跳转到最后

1、使用重载函数时,如果数据类型不匹配,C++尝试使用类型转换与形参进行匹配,如果转换后有多个函数能匹配上,编译器将报错;

论证如下:

#include <iostream>
using namespace std;
 
void show(short no, string message)
{
	cout << "short 亲爱的" << no << "号:" << message << endl;
}
 
void show(long no, string message)
{
	cout << "long 亲爱的" << no << "号:" << message << endl;
}
 
void show(double no, string message)
{
	cout << "double 亲爱的" << no << "号:" << message << endl;
}
 
int main()
{
	short a = 10;
	show(a,"我喜欢你");
 
	long b = 10;
	show(b,"我喜欢你");
 
	double c = 10;
	show(c,"我喜欢你");
 
 
	return 0;
}

运行:

各自都调用了自己对应的函数,没有问题; 

我们改一下,把long和double的重载函数注释掉:

我们定义一个double的变量,看他是否会使用short的show输出:

成功输出了,没有问题,只不过编译器提示了,double转成short可能会确实精度,不管他

如果我们定义short的变量,调用double的函数呢?

也没有问题,我们发现了编译器会帮我们隐士转换;

那么如果我们定义short变量,放开long和double的函数,那么short变量会调用哪一个呢?

直接报错,显示有多个重载函数;

观点1论证成功! 

2、引用可以作为函数重载的条件,但是,调用重载函数的时候,如果实参是变量,编译器将形参类型的本身和类型引用视为同意特征;

论证如下:

#include <iostream>
using namespace std;
 
void show(long no, string message)
{
	cout << "long 亲爱的" << no << "号:" << message << endl;
}
 
void show(long& no, string message)
{
	cout << "long 亲爱的" << no << "号:" << message << endl;
}
 
int main()
{
	long c = 10;
	show(c, "我喜欢你");
 
	return 0;
}

调用函数时,我们先传入变量,运行一下:

无法运行,他说函数有多个重载;因为long和long&都能操作变量c; 

如果我们传入常量呢?

成功的调用了long,因为不能对常量进行引用;

观点2论证结束!

3、如果重载函数有默认参数,调用函数时,可能导致匹配失败;

论证如下:

观点3论证结束!

4、const不能作为函数重载的特征;

论证如下:

观点4论证结束!

5、返回值类型不同不能作为函数重载的特征;

论证如下:

观点5论证结束! 

总结

1、使用重载函数时,如果数据类型不匹配,C++尝试使用类型转换与形参进行匹配,如果转换后有多个函数能匹配上,编译器将报错;

2、引用可以作为函数重载的条件,但是,调用重载函数的时候,如果实参是变量,编译器将形参类型的本身和类型引用视为同意特征;

3、如果重载函数有默认参数,调用函数时,可能导致匹配失败;

4、const不能作为函数重载的特征;

5、返回值类型不同不能作为函数重载的特征;

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

相关文章

  • C语言中break与continue的用法和区别详解

    C语言中break与continue的用法和区别详解

    当我们使用while或for循环时,如果想提前结束循环(在不满足结束条件的情况下结束循环),可以使用break或continue关键字,这篇文章主要给大家介绍了关于C语言中break与continue的用法和区别的相关资料,需要的朋友可以参考下
    2021-10-10
  • C语言中进程间通讯的方式详解

    C语言中进程间通讯的方式详解

    这篇文章主要为大家详细介绍了C语言中几种进程间通讯的方式,文中的示例代码讲解详细, 对我们学习或工作有一定的借鉴价值,需要的可以参考一下
    2022-08-08
  • C++中的异或运算符^的使用方法

    C++中的异或运算符^的使用方法

    本篇文章对C++中的异或运算符^的使用方法进行的详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++设计模式之外观模式

    C++设计模式之外观模式

    这篇文章主要介绍了C++设计模式之外观模式,本文详细讲解了C++中的Facade模式,并给出了实例代码,需要的朋友可以参考下
    2014-10-10
  • C++浅析内存分区模型概念与示例

    C++浅析内存分区模型概念与示例

    在了解内存分区之前,我们先来聊一聊为什么要进行内存分区。在进行了内存分区之后,在不同的区域存放的数据,会有不同的生命周期,从而会让程序员的编程变得更加灵活
    2022-09-09
  • 实例讲解C++编程中lambda表达式的使用

    实例讲解C++编程中lambda表达式的使用

    这篇文章主要介绍了C++编程中lambda表达式的使用实例,lambda表达式特性的引入在C++11中可谓千呼万唤始出来,非常重要,需要的朋友可以参考下
    2016-01-01
  • C++11 nullptr实现初始化空指针

    C++11 nullptr实现初始化空指针

    避免产生“野指针”最有效的方法,就是在定义指针的同时完成初始化操作,本文主要介绍了C++11 nullptr初始化空指针,感兴趣的可以了解一下
    2022-01-01
  • C语言编程中函数的基本学习教程

    C语言编程中函数的基本学习教程

    这篇文章主要介绍了C语言编程中函数的基本学习教程,其中着重讲到了传值调用与参数,需要的朋友可以参考下
    2015-12-12
  • C语言接口与实现方法实例详解

    C语言接口与实现方法实例详解

    这篇文章主要介绍了C语言接口与实现方法,包括接口的概念、实现方法及抽象数据类型等,并配合实例予以说明,需要的朋友可以参考下
    2014-09-09
  • linux c++ 服务器端开发面试必看书籍整理

    linux c++ 服务器端开发面试必看书籍整理

    这篇文章主要介绍了linux c++ 服务器端开发面试必看书籍整理,需要的朋友可以参考下
    2020-02-02

最新评论