C++多态的两种体现:重写(覆盖)和重载。以及重定义的区别

参考【精选】C++ 多态 超详细讲解_c++实现多态-CSDN博客

C++中重载、重定义、重写概念辨析 - 知乎 (zhihu.com)

c++是面向对象的编程语言,其三大特性为:封装,继承,多态。

封装即抽象为类,继承则是子类对父类的继承,而多态则更难理解一些。多态,多种形态,具体来说,在类中我们有时候会定义同名函数,但他们的函数体不同,会产生不同的行为。


多态,不同对象调用同一函数时,产生不同的行为。其两种体现为重写(override)和重载(overload)。 而重定义未体现多态,但经常和重写一起来做区分。

overload:较简单,即我们在一个类中,会定义几个同名函数,那么在函数名相同的情况下,如何区分进行调用呢? 这时候就看他们的参数列表(参数个数,顺序,类型)的不同。重载,是同一个类中的同名函数,其参数列表不同。

override:发生在继承的过程中,子类对父类中虚函数(virtual)的重新实现。在调用过程中,需要使用基类的指针进行调用,同时子类需要对父类中的虚函数进行重写(函数体)。重写(覆盖),发生在子类和父类的同名函数上,且是虚函数(即要用virtual修饰),其参数列表,返回值类型要求一致。    (ps特殊情况:协变和析构函数,详情参考第一条链接)

以上是多态的两种体现,发生在同一类中,以及不同类中的同名函数。


重定义:也是在继承的过程中,子类和父类中的同名函数,但不是虚函数,而是普通成员函数,这时就是重定义。也就是子类对父类中普通成员函数的重新定义,参数列表可一致也可不同。(这时基类的同名函数被隐藏)

总结:

  • 同名函数在同一类中出现,那么是重载overload
  • 在不同类中出现(子类和父类的继承),不是重写override(覆盖)就是重定义(隐藏)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值