重载和覆盖的区别?

来源:互联网 发布:苹果手机评测软件 编辑:程序博客网 时间:2024/04/30 01:53

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

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

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

原创粉丝点击