基本概念:
作用:函数名可以相同,提高复用性
函数重载满足的条件:
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)这样的话 ,只能调用第一个,毕竟第一个函数有两个参数!!!