读书人

覆盖与暗藏

发布时间: 2012-09-02 21:00:34 作者: rapoo

覆盖与隐藏

覆盖是占用了原来的位置,隐藏只是存在找不到

例如:

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关键字,此时基类的函数被隐藏(注意别与覆盖混淆)

?

读书人网 >编程

热点推荐