天天看点

类成员函数的重载 继承 隐藏

重载

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

函数名相同

参数不同

virtual关键字可有可无

重载与继承、隐藏很好区分,因为重载函数在同一个类中

举例说明

<a></a>

结果

类成员函数的重载 继承 隐藏

继承

不同的范围(分别位于基类和派生类)

参数相同

基类必须有virtual关键字

隐藏

如果派生类的函数与基类的函数同名、同参数,基类函数不带有virtual关键字

如果派生类函数与基类的函数同名、不同惨,不管基类函数带不带virtual关键字

归纳起来

   同名前提(不同名免谈)

同参+virtual——继承

同参+无virtual  / 不同参 —— 隐藏

强调:只要不是继承(virtural+同参)就是隐藏,隐藏后,如果基类、派生类有相同函数名,派生类对象只能调用派生类的函数。

 View Code

举例说明虚函数、隐藏的区别

分析

      动态绑定必须通过基类的引用或指针调用虚函数(virtual)。当这样做时,编译器将在基类中查找virtual函数。

假如找到了(同名、同参):就在其派生类中找对应的函数(这就是为什么必须在基类和派生类中特点是:同名、同参)。

如果找到了就调用派生类的函数

否则乖乖的用基类的虚函数

假如没找到对应的virtual,就找对应的函数(同名同参),这回只能在父类中倒腾了,因为根本没法通过virtual穿越到子类。

      隐藏就不同了,如果基类中连函数原型都没有,就直接报错了。如果有:直接调用就得啦(没有virtural没法对应派生类的重定义的函数)。

本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3248609.html,如需转载请自行联系原作者

继续阅读