c++继承、重载、覆盖、隐藏

1. 继承:即父类实现的函数,在子类中即可调用。
2. 重载:相同作用内,如一个类中,函数名相同,但函数形参不同。
3. 覆盖:子类和父类中函数名相同,形参相同,基类中有virtual关键字,平常用的最多virtual实现的功能即是覆盖。
4. 隐藏:子类和父类的函数名相同,形参不同,无论基类中有无virtual关键字,此时父类中的函数被隐藏;

子类和父类的函数名相同,形参相同,父类中无virtual关键字(有关键字即为覆盖,此处可看出覆盖和隐藏的区别)

继承

继承是基础,有了继承才牵扯出覆盖和隐藏,覆盖和隐藏就是对子类和父类中同名函数的处理;
重载和其他无相关性。

继承有 public,protect,private 三种继承方式。

重载

相同作用域中,函数名相同,形参不同
如下代码中两个成员函数test作用域相同,一个形参是int i一个形参是float f,此种情况即为重载

class father
{
public:
    void test(int i){}
    void test(float f)();
}

覆盖

子类和父类中函数名相同,形参也相同,基类中有virtual关键字,平常用的最多virtual实现的功能即是覆盖

class father
{
    public:
        virtual void test(int i){}
};

class child : public father
{
    public:
        void test(int i){ printf("this is child"); }
};

int main()
{
    child *c = new father();
    c->test();
}

// 打印的结果为 “this is child”

隐藏

隐藏后,子类看不到父类中的函数
子类和父类的函数名相同,形参不相同,无论父类中有无virtual关键字,此时父类中的函数被隐藏
子类和父类的函数名相同,形参相同,父类中无virtual关键字,此时父类中的函数被隐藏(此处如果父类中有关键字,则即为覆盖)

父类中有函数test(),子类中有函数test(int i),此时实例化子类对象,子类对象是看不到父类中的test函数的;
父类中有函数virtual v_test(),子类中有函数v_test(int i),此时实例化子类对象,子类对象是看不到父类中的v_test函数的;

class father
{
public:
    void test(){}
    virtual  void v_test(){}
}
class child : public father
{
public:
    void test(int i){}
    void v_test(int i){}
}


 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值