重载、覆盖、隐藏的区别

重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数。对于这两个函数的调用,在编译期间就已确定,是静态的。也就是说它们的地址在编译器就绑定了(早绑定),因此重载与多态无关。

覆盖(重写):子类重新定义父类虚函数的方法。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的。因此,这样的函数地址是在运行期间绑定的(晚绑定),重写与多态相关。

  重载的特征              覆盖的特征

  1.相同的范围(同一个类中)    1.不同的类中(父类和子类)

  2.函数名相同         2.函数名相同

  3.参数不同          3.参数相同

  4.virtual关键字可有可无      4.基类中必须有virtual关键字

 

隐藏的两种情况:

1.若派生类中的函数与基类的函数同名,但参数不同,此时无论有无virtual关键字,基类的函数被隐藏。

2.若派生类中的函数与基类的函数同名,且参数相同,若基类函数没有virtual关键字,基类的函数被隐藏。

posted on 2015-05-11 21:41  306573704  阅读(247)  评论(0编辑  收藏  举报

导航