C++中覆盖、隐藏的区别

基本规则:

    1) 如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏。

    2) 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏。

事例代码:

/**************************************************************************
	*  @Copyright (c) 2013, ChenMH, All rights reserved.

	*  @file	 : main.cpp
	*  @version  : ver 1.0

    *  @author   : ChenMH
    *  @date     : 2013/06/27 14:51
    *  @brief    : 测试C++中覆盖、隐藏的区别。因重载比较简单,不再实验。
**************************************************************************/

#include <cstdio>

class CBase
{
public:
	virtual void A(int ival){printf(" CBase::A() ");}
	void B(int ival){printf(" CBase::B() ");}
	void C(int ival){printf(" CBase::C() ");}
};

class CDerive : public CBase
{
public:
    virtual void A(int ival)    //覆盖父类的A:函数名、参数完全相同,且父类一定要有virtual
    {printf(" CDerive::A() ");}    

    void B(int ival)            //隐藏父类的B:函数名、参数完全相同,且父类无virtual
    {printf(" CDerive::B() ");}    

    void C(float ival)          //隐藏父类的C:函数名相同、与数不同,与virtual无关
    {printf(" CDerive::C() ");}    

};

int main()
{
	CDerive d;
	CBase* pB = &d;
	
	d.A(1); pB->A(1);printf("\n");	//均调用子类的A
	d.B(1); pB->B(1);printf("\n");	//分别调用各自的B
	d.C(1); pB->C(1);printf("\n");	//分别调用各自的C

	return 0;
}

输出结果:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cabinriver

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值