首页 > 其他 > 详细

重载、覆盖、隐藏的区别

时间:2020-03-30 09:40:00      阅读:35      评论:0      收藏:0      [点我收藏+]

重载:针对于普通函数

要求函数名相同,形参列表不同,返回值无所谓。

注意不能仅仅通过返回值来区分重载函数。例子:void f(){} 和int f(){}这两个函数定义是错误的,不能同时定义这两个函数!

比如:

void f(int x){}

void f(double x){}

覆盖(重写):针对于继承体系的虚函数

指基类有一个虚函数,派生类中重新定义该虚函数,重新定义的含义是:返回值、函数名、形参列表都一样。

比如:

class Base{
public:   
virtual void f(int x){} }; class Derived:Base{
public:   
void f(int x){} };

 

其中派生类的版本f函数可以加virtrual,不加也可以。但基类一定要加virtual,不然就不是虚函数。

隐藏:针对于继承体系的普通函数

指继承体系中,基类有一个函数f(非虚函数),派生类也有一个f函数(只要是同名的就可以),那么除非显式调用基类版本的f函数,否则是看不到基类版本的f函数的,就好像基类的同名函数都被“隐藏”起来了一样。

比如:

class Base{
public:
    void f(){}
};

class Derived:Base{
public:
    void f(){}
    void f(int x){}
    int f(float x){ Base::f();}

};

上面Derived类中的三个版本的f函数都是对于基类f函数的隐藏。不过虽然隐藏了,还是可以显式用Base::f()来调用Base版本的f函数。或者在派生类中加上using Base::f;这样可以直接使用Base的所有版本的f函数。

 技术分享图片

 

重载、覆盖、隐藏的区别

原文:https://www.cnblogs.com/FdWzy/p/12583707.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!