看一段简单代码
#include <iostream>
#include<string>
using namespace std;
void fun(int a, int b)
{
cout << "a+b=" << a + b << endl;
}
int fun(int a, int b)
{
cout << "a+b=" << a + b << endl;
return a + b;
}
int main()
{
fun(1, 2);
system("pause");
return 0;
}
可以清楚的看出,当我们调用函数的时候,有时候我们并不需要返回值,由此可见此时编译器就不知道到底要调用哪个函数了,所以函数重载能以返回值类型区分。
注意1:
构造函数有默认值的情况下,某种构造函数不能被重载(会出现满足多个的情况)
#include<iostream>
using namespace std;
class test
{
public:
test(int n1=0,int n2= 0):num1(n1),num2(n2)
{
cout << "test1" << endl;
}
test()
{
cout << "test2" << endl;
}
private:
int num1,num2;
};
int main()
{
test t; //两个都满足,编译器报错
system("pause");
}
class Base
{
public:
void print(int num)
{
cout << num << endl;
}
void print(int num) const
{
cout << num + 1 << endl;
}
};
int main()
{
Base b; //const与非const函数都存在时,只会调用非const函数,若没有非const函数,则可以调用const函数
const Base b; //只能调用const函数
b.print(10);
system("pause");
return 0;
}
更深层次的理解,可以从编译器如何解决命名冲突中看
可参考:
C++中的函数重载中为什么不考虑返回值类型?
c++继承过程函数重载重写重定义