C++中覆盖与隐藏的学习

首先,从概念上分析,

覆盖条件是:

                1. 派生类函数与基类函数同名,

                2.函数的参数不同

                3.基类函数有Virtual关键字。

隐藏条件是:

                1.派生类函数与基类函数同名

                 2.基类函数无Virtual关键字

                3.函数参数可以相同也可以不同。

 

其次,从使用上分析,

如果派生类覆盖了基类的函数,则使用动态对象为派生类的指针来调用该函数时,其实,真正调用的是派生类的函数。

 

如果派生类隐藏了基类的函数,基类的函数在派生类中是不可见的。

这时,使用派生类对象调用基类的同名函数时,如果派生类不能进行类型自动转换,则编译出错,否则,会调用派生类进行类型转换后的函数。

 

使用基类对象时,即使该对象的动态类型为派生类,但是,在调用一个非Virtual函数时,仍然是Base类中的函数。

 

void main(void)
{
Derived d;
Base *pb = &d;
Derived *pd = &d;
// Good : behavior depends solely on type of the object
pb->f(3.14f); // Derived::f(float) 3.14
pd->f(3.14f); // Derived::f(float) 3.14
// Bad : behavior depends on type of the pointer
pb->g(3.14f); // Base::g(float) 3.14
pd->g(3.14f); // Derived::g(int) 3 (surprise!)
// Bad : behavior depends on type of the pointer
pb->h(3.14f); // Base::h(float) 3.14 (surprise!)
pd->h(3.14f); // Derived::h(float) 3.14
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值