C++ override和overload的区别
来源:互联网 发布:淘宝商城儿童女装坎肩 编辑:程序博客网 时间:2024/05/21 17:28
注1:overload——重载,override——覆盖(有一些人翻译成重写或覆写)。
学习C++这么久了,才发现自己一直只知道overload,但没有覆盖的概念,甚至有时把覆盖也说成重载。
现在把通过查找资料,学习到的重载与覆盖的知识总结一下。
1、 重载——(静态联编)
函数名相同,但参数列表不同(参数个数不同,参数的类型不同,或者两者兼有)。对返回值无要求。
注2:仅返回值类型不同,不能认为是函数重载。
可以重载的,可以是类的成员函数,也可以普通函数,也可以重载运算符。
在编译的时候,根据参数列表判断调用哪个函数。
2、 覆盖——(动态联编)
子类重写父类的虚函数的一种形式,实现多态。
函数名,参数列表完全相同、返回值也相同。
可以覆盖的,只能是子类重写父类的虚函数。
只有在运行阶段才能确定调用的是哪个函数。即面向对象的多态特性,即override。
面向对象的几个基本概念
多态:目的实现接口重用。
继承:实现代码重用。
封装:实现代码的模块化。
3、 两者对比总结:
重载
覆盖
作用域
作用域相同,同一个类,或同为一个全局函数
在不同作用域中,一个是在父类,一个是在子类。
函数名
完全相同
完全相同
参数列表
必定不同,可以是参数类型,参数个数,参数类型和个数
个数和类型完全相同
返回值类型
对返回值类型无要求,可以相同,可以不同,但若仅返回值不同,不能实现重载
返回值类型也必须相同
是否是virtual
不是
基数的函数必须是virtual
编译方式
静态联编(在编译阶段确定调用哪个函数)
动态联编(在运行阶段才能确定调用哪个函数)
总之,override与overload的一个最大的区别就是作用域不同,以及函数原型是否相同.
override: 覆盖是子类重写父类的虚方法的一种形式。
overload: 重载是值允许存在重名的多个方法。而这些函数的参数列表不同(或者是参数
的个数不同、或者是参数的类型不同或者两者都不同)。
注:因本人水平有限,若不当之处欢迎大家指正。
- overload和override的区别
- Overload和Override的区别
- Overload和Override的区别
- Overload和Override的区别
- Overload和Override的区别
- overload和override的区别
- override和overload的区别
- Overload和Override的区别
- overload和override的区别
- overload和override的区别
- overload和override的区别
- overload和override的区别
- overload和override的区别
- Overload和Override的区别
- Override和Overload的区别。
- Overload和Override的区别
- Overload和Override的区别
- overload和override的区别
- android kernel 初始化 2
- Map中STL
- Linux下jdk的安装
- 关于WINSOCK.H与winsock2.h中的重定义解决办法分析
- WebKit and offlineCache
- C++ override和overload的区别
- 企业信息化管理优化的几个方面
- 认识linux服务(关闭你不需要的服务)
- CopyU! v2任务处理泵完成
- JPA中entity的一些功能
- servlet 生命周期
- iframe不完全显示的解决方法
- Qt:支持鼠标拖动来移动内容的窗口
- java中用URLConnection 类post方式提交表单