覆盖与隐藏
覆盖是占用了原来的位置,隐藏只是存在找不到
例如:
class A{
void fun1(){
int v;
}
?
static void fun2(){
int v;
}
}
?
class B extends A{
void fun1(){
int u;
}
?
static void fun2(){
int u;
}
}
?
?
A a=new B();
?
a.fun1()//调用的是B中的fun1因为父类的被覆盖了不存在了,只有通过特殊手法找到。
a.fun2()//调用的是A中的fun2因为fun2只是被B暂时隐藏,还存在。
?
?
关于C++类成员函数的重载、覆盖、隐藏与virtual关键字
?
最近看<<高质量C++>>时读到的关于成员函数的重载/覆盖/隐藏,把我的一点理解写出来,希望大家批评与指正.1.?重载、覆盖与隐藏
1).重载:成员函数具有以下的特征时发生“重载”
A.相同的范围(同一个类中)
B.函数的名字相同
C.参数类型不同(不能进行隐式类型转换)
D.Virtual关键字可有可无
2).覆盖(也叫“继承”):指派生类函数覆盖基类函数,特征是:
A.不同的范围(分别位于基类与派生类中)
B.函数名字相同
C.参数相同
D.基类函数必须有virtual关键字
3).隐藏:是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
A.如果派生类的函数与基类的函数同名,但是参数不同,此时不论有无virtual关键字,基类的函数都将被隐藏,注意别与重载混淆)
B.如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字,此时基类的函数被隐藏(注意别与覆盖混淆)
?