函数重载需要注意的点

本文介绍了C++中的函数重载,强调了函数重载的关键条件:同一作用域、函数名相同、参数类型、个数或顺序不同。讨论了返回类型不能作为重载条件、引用在重载中的作用以及默认参数可能导致的二义性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念:

作用:函数名可以相同,提高复用性

函数重载满足的条件:
1.同一作用域

2.函数名相同

3.函数参数类型不同,个数不同,顺序不同

基本规则就上面那几条,不多说了,开始难一些的东西:

1.函数的返回类型不能当作重载的条件:

void func()
{
	cout << "我好帅" << endl;
}

int func()
{
	cout << "我好帅" << endl;
}

以上代码会出现下图报错,也就是说一个是void  另外一个是int返回类型不同的函数,不满足重载函数的条件

 2.引用作为函数重载的条件:
 

#include<iostream>
using namespace std;

void func(int &a)
{
	cout << "func(int &a)的调用" << endl;
}

void func(const int &a)
{
	cout << "func(const int &a)的调用" << endl;
}

int main()
{
	int a = 10;       //调用第一个函数  相当于int &a = a;
	func(a);          //a = 10;

	system("pause");
	return 0;
}

运行结果

表明了运行第一个函数  相信大家这个应该都能懂

#include<iostream>
using namespace std;

void func(int &a)
{
	cout << "func(int &a)的调用" << endl;
}

void func(const int &a)
{
	cout << "func(const int &a)的调用" << endl;
}

int main()
{
	func(10);     //第一个函数int &a = 10不合法

	system("pause");
	return 0;
}

 如果直接调用第一个函数的话  会报错  报错结果如下:

 因此直接调用func(10)的话,相当于上述代码中的第一个函数的参数调用不合法;而第二个函数因为前有const修饰因此可以直接调用!!!

至于这个const int &a = 10可以直接调用:::::

     重点来了:引用的本质就是指针常量 指向的地址不可变 但是可以对地址内存的数据进行操作

  前有const修饰的话 相当于:

const int& a = 10;    //相当于int temp = 10;
                      //const int &a = temp;

上述代码中的注释都是编译器识别到a是引用之后自动在编译器中完成,你知道有这个规则即可!!!

3.函数重载遇到默认参数:

#include<iostream>
using namespace std;

int func(int a, int b = 20)
{
	return a + b;
}

int func(int a)
{
	return a + b;
}


int main()
{
	func(30);

	system("pause");
	return 0;
}

运行结果会报错:

因为func(30)调用上面两个函数都可以通过,出现了二义性。当然要是func(30,10)这样的话 ,只能调用第一个,毕竟第一个函数有两个参数!!!

   

现在所偷的懒,以后会数倍返还与你所流的汗!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值