重载(overload),重写(override,也称覆盖), 重定义
来源:互联网 发布:天猫国际官方直营知乎 编辑:程序博客网 时间:2024/06/14 15:11
先来看几个概念:
重载(overload),重写(override,也称覆盖), 重定义(redefine,也称隐藏)
(PS:第三个我不确定在英文中是否应该称为redefine,如有问题,留言告知,谢谢)
一、重载(overload)
指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。
(1)相同的范围(在同一个作用域中) ;
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。
(5)返回值可以不同;
二、重写(也称为覆盖 override)(是多态的实现方式,可以复习下vtable)
是指派生类重新定义基类的虚函数,特征是:
(1)不在同一个作用域(分别位于派生类与基类) ;
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有 virtual 关键字,不能有 static 。
(5)返回值相同(或是协变),否则报错;<—-协变这个概念我也是第一次才知道…
(6)重写函数的访问修饰符可以不同。尽管 virtual 是 private 的,派生类中重写改写为 public,protected 也是可以的
三、重定义(也成隐藏)(注意如果参数不同,尽管如果基函数有virtual,派生类是无法有同一个vtable指针的,无法实现多态,因此也就不是override,这是重定义的case4,case5就是没有基函数virtual,此时没有vtable,也就无法实现多态)
(1)不在同一个作用域(分别位于派生类与基类) ;
(2)函数名字相同;
(3)返回值可以不同;
(4)参数不同。此时,不论有无 virtual 关键字,基类的函数将被隐藏(注意别与重载以及覆盖混淆) 。
(5)参数相同,但是基类函数没有 virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆) 。
- 重载(overload),重写(override,也称覆盖), 重定义
- C++重载(overload)、重写(overwrite,也称隐藏)、覆盖(override)
- C++中重载(overload)、重写(override,也叫做“覆盖”)和重定义(redefine)的区别?
- 重载(overload)、覆盖(也叫重写)(override) 隐藏(hide)
- 重载(overload)、重写(override)、重定义(redefining)
- C++函数重定义(redefining)、重载(overload)、重写 (override)
- override重写(覆盖) overload重载 多态
- Overload 重载:Override 覆盖:Overwrite 重写:
- override->重写(=覆盖)、overload->重载
- Overload(重载)Override(覆盖)Overwrite(重写)
- 多态 -重写/覆盖(Override) -重载(Overload)
- 重载(overload)重写(override)
- overload重载、override重写
- C++重写(override)、重载(overload)、重定义(redefine)以及虚函数调用机制【个人总结】
- C++系列——重载(overload),重写(override),重定义(redefine)
- C++ 的重载(overload),重写(override), 重定义(redefining/hide)
- c++ 重载(overload)、覆盖(override)、重定义(隐藏overwrite)
- object pascal中的覆盖(override)、重定义(redefine)和重载(overload)
- 安卓App闪屏页及引导页的实现
- 今天我又get到那些Linux的命令
- 2016.09.10 初中部 NOIP普及组 模拟赛
- 时间复杂度和空间复杂度详解
- awesome-android-libraries
- 重载(overload),重写(override,也称覆盖), 重定义
- redis setnx 实现分布式锁和单机锁
- WEB前端 | HTML基础——(4)定位position
- Android Application类
- JS函数参数都是按值传递的!
- SQL language
- CSS选择器修改样式,及单独修改样式this.style.
- Linux软件安装
- PAT (Advanced Level) Practise 1116Come on! Let's C (20)