天天看点

重载、覆盖和隐藏的区别

一、重载

重载简单的来说就是在同一作用域下,函数名字相同但是函数的参数列表不同(包括参数个数和参数类型)就构成了重载,但是与返回值无关。

二、覆盖

1、首先覆盖必须是虚函数(被virtual修饰的函数)

2、必须是子类的虚函数覆盖父类的虚函数

3、函数签名必须相同(参数列表必须完全一致,const属性也会影响覆盖的结果)

4、返回值必须是同类或者父子类(子类的返回值要能向父类进行隐式转换)

三、隐藏

隐藏就是子类会隐藏父类中同名的标识符(不一定是函数),而且如果父类中有同名的标识符,编译通过且不构成覆盖,则一定是构成隐藏关系。

继续阅读