C++中的重载

c++的重载的注意事项:####

1,引用作为重载的条件,举例:

1
2
3
4
5
6
7
8
9
10
#include<iostream>
using namespace std;
void func(int &a){
cout<<"func(int &a)调用"<<endl;
}
int main(){
int a=10;
func(a);
return 0;
}

1
2
3
4
5
6
7
8
9
10
#include<iostream>
using namespace std;
void func(const int &a){
cout<<"func(const int &a)调用"<<endl;
}
int main(){
int a=10;
func(a);
return 0;
}

调用的是上面一个版本,但是如果main函数中是这样写的话:func(10);return 0;那么调用的就是下面这个版本,这里的原因主要通过引用的原理很好理解:int &a=10;不合法,因为引用只能是栈或者堆中的数据,而10是常量,是放在常量区中的,所以不合法。而const int &a=10;是合法的。

2,函数重载碰到默认参数,举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
using namespace std;
void func(int a,int b=10){
cout<<"func(int a,int b=10)调用"<<endl;
}

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

int main(){
func(10);
return 0;
}

上面这种情况也会报错,因为默认参数在这种情况,上下两个func既能满足重载,又能因为默认参数导致编译器不知道调用谁。理解了默认参数的使用就可以避免。