什么情况下是重载,什么情况下是重写,什么情况下是覆盖

如题所述

关于三个sm,这是一般笔试的时候遇到的问题。
重载,是在相同的作用域中,如果具有相同名字而形参表不同的函数,则成为重载。
重载(overload)不是根据返回值判断,如果仅仅是返回值不同的两个函数,则视为函数的重复声明。编译出错。
覆盖(override):指的是派生类覆盖基类函数,特征是:不同的范围(分别位于派生类与基类),函数名字相同
参数相同,基类函数必须有virtual关键字
重写(overwrite):是指派生类的函数屏蔽了预期同名的基类函数,规则如下:
1. 如果派生类的函数与基类的函数同名,但是参数不同,此时无论有无virtual关键字
,基类的函数将被屏蔽(注意别和重载混淆,是在不同的作用域内,重载时在同一作用域内如:同一个类)
2.如果派生类的函数与基类中的函数名相同,并且参数也相同的话,但是基类函数没有virtual关键字,此时基类的函数
被屏蔽(注意与覆盖的区别)。
特别注意基类有摸个函数的多个重载版本(overload),而你的子类中重写遮蔽,所以,正常情况下,在子类中应该重写基类中的所有版本。
具体的将,继承类的重载和重写都包含了重写的含义,即只要函数名一样,基类的函数版本就会被遮蔽。所以应该重写所有基类的的重载版本。
重载只在当前类中有效,继承会失去重载的特性,也就是说吧基类的重载函数放在继承类中,必须重写。总结如下:重载(overload)就是在同一个作用域内的函数名形同,而参数不同的方法,这是为了能够提供更多的同名函数不同的实现方法。
而覆盖和重写呢,则是针对基类和派生类而言的。
覆盖,顾名思义就能知道必须是函数名和参数都一样,才叫覆盖。否则就不能完全覆盖了~哈哈但是必须有virtual关键字。
重写呢,就是如果在基类中存在同名的函数,在派生类中如果有同名函数的话,那么就叫重写。从而屏蔽了基类的同名函数。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-23
override->重写(=覆盖)、overload->重载.
overload是重载,一般是用于在一个类内实现若干重载的方法,比如你熟悉的system.out.print,你可以在print里输入int类型的值或者string类型的值都可以。重载都是在同一个类里,只不过参数和返回值有变化。
override是重写也叫做覆盖,一个子类继承了父类,那子类就可以重写父类已经存在的方法。