重载、覆盖与隐藏区别

  • 函数重载

    函数名相同,作用域相同,参数列表不同,不能靠返回值类型区别是否重载,const成员函数可以构成重载,因为this指针作为默认的参数,对const和非const成员函数是不同的。不靠virtual区分。
    class …
    {
    virtual int fun();
    void fun(int);
    void fun(int)const;
    int fun(double);
    };

  • 函数覆盖

    类之间继承关系之间,派生类覆盖基类同名函数,基类必须是虚函数,派生类中同名函数可虚可不虚,但参数列表要相同,而且有相同的返回类型。
    class Base
    {
    public:
    virtual void fun(){}
    };
    class Derived:public Base
    {
    public:
    void fun();
    };

    重载与覆盖的区别:
    覆盖是子类与父类之间的关系,是一种垂直关系。
    重载是同一个类中不同方法之间的关系,是一种水平关系。
    覆盖要求参数列表相同,重载则要求不同。
    覆盖要求返回类型相同,重载不要求。

  • 函数隐藏

    类之间继承关系之间,派生类中函数隐藏了基类同名函数。无论基类是否有虚函数,只要函数参数不同,基类同名函数都会被隐藏,与重载的区别是两个函数是否在一个类中。或者函数参数相同,但是基类函数不能为虚函数,与覆盖的区别是基类有无虚函数。
    class Base
    {
    public:
    virtual void fun(){}
    void fun1();
    };
    class Derived:public Base
    {
    public:
    void fun(int);
    void fun1();
    };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值