重载隐藏重写(覆盖)

C++ 中,重载、隐藏、重写(覆盖)的区别是什么?

重载

  1. 同一个类中参数类型,参数个数或参数顺序不同但函数名和返回值相同的函数构成重载。
  2. 返回值类型不同不构成重载。

隐藏

  1. 派生类的函数屏蔽了与其同名的基类函数。
  2. 只要同名函数,不管参数列表是否相同,基类函数都会被隐藏。

重写(覆盖)

  1. 派生类中存在重新定义的函数。
  2. 其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(花括号内)。
  3. 派生类调用时会调用派生类的重写函数,不会调用被重写函数。重写的基类中被重写的函数必须有 virtual 修饰。

总结

  1. 重载是发生在单个类里面,仅仅是参数的个数,类型以及顺序不一样。
  2. 隐藏是发生在子父类之间,父类的函数是非 virtual 的,子类的函数只需要函数名和父类的一致,不管参数和返回类型,父类的函数都会被隐藏。
  3. 重写是发生在子父类之间,父类的参数一定是 virtual 的,并且子类的函数原型和父类的完全一样,即返回类型,参数个数,顺序,类型完全一样,此时发生重写。这就是多态。