重载和覆盖的区别?

覆盖(override):是指子类重新定义父类的虚函数的做法。重写的函数必须有一致的参数表和返回值(C++标准允许不同返回值的情况,但是很少有编译器支持这个特性)。当子类重新定义了父类的虚函数后,父类指针根据赋值给它的不同的子类指针,动态地调用属于子类的虚函数,这样的函数调用在编译期间是无法确定的。

重载(overload):是指编写一个与已有函数同名但参数列表不同(参数类型不同,或参数个数不同,或两者皆有)的函数。其实,重载的概念并不属于“面向对象编程“。重载的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对编译器来说是这样的)。对于具体调用的是哪个函数,在编译器期间就已经确定了,是静态的。

因此,重载只是一种语言特性,与多态无关,与面向对象也无关,真正与多态相关的是“覆盖”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值