C++ 多态、重载、函数隐藏

来源:互联网 发布:九维网络登录 编辑:程序博客网 时间:2024/05/01 04:45

1. 多态:派生类对基类的virtual方法进行覆盖。注意:此时的函数原型与基类保持一致,即同名同参数类型。

特征是:
(1)不同的范围(分别位于派生类与基类);

(2)函数名字相同;

(3)参数相同;

(4)基类函数必须有virtual关键字。

(5)动态编译。

基类:




子类:




执行:



结果:



结论:

只有virtual(即多态),才会在运行时查找虚函数列表,调用对应对象的方法。



2. 重载:

(1)相同的范围(在同一个类中);

(2)函数名字相同;

(3)参数不同;

(4)virtual关键字可有可无。

(5)静态编译。


重载与指针实际指向的对象类型无关,多态与指针实际指向的对象类型相关。若基类的指针调用派生类的重载版本, C++ 编绎认为是非法的, C++ 编绎器只认为基类指针只能调用基类的重载版本,重载只在当前类的名字空间作用域内有效,继承会失去重载的特性,当然,若此时的基类指针调用的是一个虚virtual 函数,那么它还会进行动态选择基类的虚 virtual 函数版本还是派生类的虚 virtual 函数版本来进行具体的操作,这是通过基类指针实际指向的对象类型来做决定的,所以说重载与指针实际指向的对象类型无关,多态与指针实际指向的对象类型相关。


3. 隐藏:派生类的函数屏蔽了与其同名的基类函数。(例子中的novirtualfoo()方法即为隐藏)

(1)如果派生类的函数与基类的函数同名,但是参数不同。
     此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。
     此时,基类的函数被隐藏(注意别与覆盖混淆)。


0 0
原创粉丝点击