区别:函数重载是函数在同个作用域中,函数原型不同;而函数覆盖则在不同作用域中,函数原型可以相同也可以不相同。
如果在当前的作用域中找到了名字,就不会向更大作用域查找,即使形参不匹配。
#include <iostream>
int get(int a)
{
return a;
}
int get()
{
return 0;
}
int main(void)
{
int get();
std::cout << get(10) << std::endl;//error,not find”int get(int a)”
//correct:std::cout << ::get(10) << std::endl;
return 0;
}
注:main作用域int get()把全局的作用域int get(int a)覆盖,可以通过指定作用域解决该问题
Ps:该问题在继承类中:
#include <iostream>
class A
{
public:
void get(int a){std::cout << "This is A" << std::endl;}
};
class B:public A
{
public:
void get(){std::cout << "This is B" << std::endl;}
};
int main(void)
{
B b;
b.get(2);//错误,当前作用域在B中
//correct: b.A::get(2);
return 0;
}