重载和重写以及重新定义(隐藏)有什么区别?
1.重载
重载是在一个作用域内进行的,多定义几个参数列表(参数类型和参数个数)不同但同名方法,这种叫做重载。重载通常发生在一个类内。
如:
class Demo {
void func() { ... }
void func(int a) { ... }
void func(double a, int b) { ... }
}
注意 : 返回类型并不作为函数重载的依据。
#include <iostream>
using namespace std;
void f1(int n)
{
}
double f1(int n)
{
}
int main(void)
{
return 0;
}
出现了二义性
2.重写(覆盖)
重写指的是派生类重写基类的方法,更改方法的行为,需要注意的是重写基类的方法要求派生类的方法必须与基类的方法具有完全相同的方法名以及参数列表,这时候如果通过派生类对象调用派生类方法的时候将会调用派生类的方法而不是基类的方法。
3.隐藏(重新定义)
重新定义,我们知道重新定义将隐藏方法,在派生类重新定义方法有点像重载,但是重载一般发生在一个类中而且不要求像重写一样参数列表和函数名都相同,而这里的重新定义发生在派生类中,此时派生类将隐藏基类的同名方法,而只使用派生类重新定义的同名方法。