C++中 函数名称可以重复
必须在同一个作用域
函数的参数 个数、类型或顺序 不同
//overload
void func() {
cout << "func()" << endl;
}
void func(int a) {
cout << "func(int a)" << endl;
}
void func(double a) {
cout << "func(double a)" << endl;
}
void func(double a, int b) {
cout << "func(double a, int b)" << endl;
}
void func(int a, double b) {
cout << "func(int a, double b)" << endl;
}
class Person1 {
void func();
};
void test22() {
func(1.1,2);
}
返回值可以作为函数重载的条件吗?不可以。
当函数重载碰到了默认参数 要注意避免二义性问题
void func2(int a, int b = 10) {
cout << "func2(int a, int b=10)" << endl;
}
void func2(int a) {
cout << "func2(int a)" << endl;
}
void test23() {
func2(10);//对重载函数调用不明确
}
1. 引用必须要引用合法的内存空间
2. const也是可以作为重载的条件
//reference's overload
void func3(int& a) {//引用必须要引用合法的内存空间
cout << "func3(int& a)" << endl;
}
//int tmp=10; const int &a=tmp;
void func3(const int& a) {//const也可以作为重载的条件
cout << "func3(const int& a)" << endl;
}
void test24() {
int a = 10;
func3(10);
}
编译器为了实现函数重载,默认为我们做了幕后工作,编译器用不同的参数类型来修饰不同的函数名,
比如void func();编译器可能会将函数名修饰成_func,
当编译器碰到void func(int x)可能修饰为_func_int,
void func(int x,char c);修饰为_func_int_char
不同编译器会产生不同内部名