Welcome to A!Die Software Studio |
override 函数名和参数类型以及返回类型必须相同,即签名都是一致的——或者叫相貌和衣服都是一样的,一般用在继承过程中。
overload 函数名必须相同,签名必须不同(参数个数,顺序,类型),返回类型可以不同,用在同一个类中,在编译时候确定。
override 是指在不同作用域中,多个函数原型完全一样,而实现却不同的函数。在C++中,经常发生在类的继承中。当基类中的某个方法是virtual或pure virtual函数时其子类中对该方法的重新实现就属于override(重写)。
使用时,可以通过基类的指针或者引用所指向的具体对象来确定调用的是哪个方法,从而实现函数的多态。
对于基类中的非virtual类型的成员函数,若其子类中也声明了与该函数名称相同的函数,那么基类中的该函数(也许是一系列函数,如果该函数在基类中有重载的话)将被隐藏,可以通过域解析操作符来调用。不过按照C++的设计思想来说呢,基类中的非virtual类型的成员函数,是不需要在子类中进行修改的,所以如果在子类中出现了这种隐藏的情况,说明应该将基类中的该函数改成virtual类型的,然后就是override了!
overload则是指在相同作用域中,多个函数具有相同的名字,但参数的数目和类型各不相同(当然相同数目和类型,如果顺序不同也是可以的),因为函数重载的机制是在C++中函数的签名与其参数有关,而不像C中,只与函数名有关。
总之,override与overload的一个最大的区别就是作用域不同,以及函数原型是否相同.
override: 覆盖是子类重写父类的虚方法的一种形式。
overload: 重载是值允许存在重名的多个方法。而这些函数的参数列表不同(或者是参数的个数不同、或者是参数的类型不同或者两者都不同)。
重载(overload 与多态的概念无关) :因为是在编译阶段就确定的。
只有在与运行阶段确定的才称为面向对象的多态性. 即override.
看得不是很明白,还得再消化一下。。。。