C++学习[1]--重载,重写区别以及隐藏出现的情形
来源:互联网 发布:mac口红圣诞节限量版 编辑:程序博客网 时间:2024/05/16 11:07
机理上看:
重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数,就成了不同的函数(对于编译器来说),如有两个同名函数function func(p:integer)和 function func(p:string):integer那么编译器做过修饰后的函数名称可能是这样的,int_func和str_func对于这两个函数的调用,在编译器间就已经确定了,是静态的,就是说,他们的地址在编译器就绑定了(早绑定),因此,重载和多态无关。
重写:和多态真正相关,当子类重新定义父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译器无法确定(调用的子函数的虚函数的地址无法给出),因此这样的函数地址在运行期绑定(晚绑定)
字面上看:
重写是子类的方法覆盖父类的方法,要求方法名和参数都相同,这和继承、多态相关。
重载是在同一个类中的两个或者两个以上的方法,拥有相同的方法名,但是参数却不同,方法体也不同,最常见的重载类中就是累的构造函数。
从作用区域看
重载可以一个类里面重载几次这个函数,也可以不同的类之间都对这个方法进行重载
而重写的关联性就更强些,是作用在父类、子类之间进行的演变行为。
最后对于隐藏现象的理解,一般指基类被子类隐藏这种现象。
如果派生的时候,父类没有写virtual关键字,而派生函数对父类函数进行了重写,那么这个时候父类原来的函数将会被隐藏,也就是屏蔽。
如果派生类和父类有同名函数,但是不同参数,这时候派生函数无法对父类的函数进行重载的,如果写了,也会讲原来父类的函数屏蔽掉。
- C++学习[1]--重载,重写区别以及隐藏出现的情形
- C+=重载、重写和隐藏的区别以及实例分析
- C++_重载、重写(覆盖)和隐藏的区别:
- 关于覆盖、隐藏、重载、重写的区别
- 重载、重写(覆盖)、隐藏的区别--Java
- C++中重载,重写,隐藏的区别
- C++中重定义、重写、重载的区别以及隐藏与覆盖的访问
- C++中重定义、重写、重载的区别以及隐藏与覆盖的访问
- C++中重定义、重写、重载的区别以及隐藏与覆盖的访问
- C++中重定义、重写、重载的区别以及隐藏与覆盖的访问
- C++中重定义、重写、重载的区别以及隐藏与覆盖的访问
- C++对象模型和虚函数表分析以及重载、重写、隐藏的区别
- 方法重写、重载、以及它们的区别
- 重载重写以及访问权限的学习
- 【C#】重写和重载的区别
- [转载]C#隐藏、C#重写、C#重载的区别
- 方法重载、重写、隐藏(new)的区别
- 重载、隐藏和重写(有的书叫“覆盖”)的区别?
- 计算机视觉与模式识别 code
- 反射生成SQL语句入门
- 如何高效使用和管理Bitmap--图片缓存管理模块的设计与实现
- Property List和NSUserDefaults
- UVA 1344 Tian Ji -- The Horse Racing
- C++学习[1]--重载,重写区别以及隐藏出现的情形
- 实战 SSH 端口转发
- 设计模式——小单例有大秘密
- FlashBuilder的安装和配置
- MSSQL隔离级别理解
- free 命令结果完全剖析
- Winform 打印PDF顺序混乱,获取打印队列
- 从truncate表的hang现象引出来的oracleBUG 13023854
- CentOS 的shutdown不能用~~ command not found