C++中重载/覆盖/隐藏的区别

来源:互联网 发布:淘宝电风扇 编辑:程序博客网 时间:2024/05/17 07:37

C++中重载/覆盖/隐藏的区别

成员函数被重载的特征:

  • 相同的范围(在同一个类中,作用于相同)
  • 函数名相同
  • 参数不同
  • virtual关键字可有可无

覆盖是指派生类函数覆盖基类函数,特征:

  • 不同的范围(分别位于派生类与基类)
  • 函数名相同
  • 参数相同
  • 基类函数必须有virtual关键字

隐藏是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

  1. 如果派生类的函数与基类的函数同名,但是参数不同。此时,无论有无virtual关键字,基类的函数将被隐藏,*即无法通过与基类函数参数列表相同的函数去调用基类函数,因为已经被隐藏,会报错,当然,类内部可以通过::访问基类被隐藏函数,隐藏是对于对象的(注意别与重载混淆)
  2. 如果派生类的函数与基类的函数同名,且参数相同,但是基类没有virtual关键字。此时,基类的函数将被隐藏(注意别和覆盖混淆)

*也就是说,如果基类函数没有virtual声明,如果派生类用同样的函数名重定义了函数,则将隐藏基类中所有与之同名的函数,无论参数列表是否相同,反正是隐藏了

0 0
原创粉丝点击