【C++】重载 & 覆盖 & 隐藏 & 多态

在这里插入图片描述

  1. 重载(overlord):在同一个作用域内,函数名相同,参数列表不同(参数个数不同,或者参数类型不同,或者参数个数和参数类型都不同),返回值类型可相同也可不同。重载是一种静态多态,即在编译期间便可绑定到对应函数。
  2. 覆盖(override):父类函数为虚函数(virtual),在子类中定义一个与父类完全相同的虚函数(函数名,参数个数,参数类型,返回值类型都相同),那么这个子类的函数就覆盖了父类的虚函数,此时这个子类的函数也是虚函数,如果不加virtual修饰,编译器也会默认为虚函数。如果用一个父类的指针或引用指向子类对象,那么用这个指针或引用调用该虚函数,调用的是子类重写的虚函数;相反,如果用一个父类的指针或引用指向父类对象,那么用这个指针或引用调用该虚函数,调用的是父类的虚函数。覆盖是通过虚函数表机制来实现的,是一种动态多态,即在运行期间才能进行函数绑定。
  3. 隐藏:在父类和子类中,成员函数(或成员变量)名称相同,则访问该成员时只能访问子类的成员,父类同名成员被隐藏。如果要访问父类同名成员,必须在前面加上父类作用域。

为什么返回值类型不同不是重载?
因为函数的调用是根据函数名和参数类型列表来区分的,与返回值类型无关。

发布了15 篇原创文章 · 获赞 1 · 访问量 1666

猜你喜欢

转载自blog.csdn.net/weixin_43465579/article/details/99709103
今日推荐