C++中隐藏和重写的区别

1、定义和目的

隐藏

在继承过程中,子类(派生类)的同名函数屏蔽了基类(父类)中的同名函数。这种机制使得通过子类对象调用该函数时,默认调用的是子类的函数,而基类的同名函数被隐藏。隐藏的目的并非出于设计上的直接需求,而是继承关系带来的自然结果,但可能会导致一些非预期的行为。

重写:

在继承关系中,子类重新定义了基类中的虚函数。这要求函数名、参数列表和返回类型都与基类中的虚函数完全一致,只有函数体(实现)不同。重写的目的是为了实现多态性,即允许通过基类指针或引用来调用子类的函数。

2、发生的条件

隐藏:

只要子类中存在与基类同名的函数,无论参数列表是否相同,都会导致隐藏。特别地,如果参数列表相同但基类函数没有virtual修饰,则也是隐藏而非重写。
重写:

只有在基类中定义了虚函数,并且子类中的函数与基类中的虚函数在函数名、参数列表和返回类型上完全一致时,才构成重写。此外,基类中的虚函数必须有virtual修饰。

3、调用方式

隐藏:

当通过子类对象调用同名函数时,默认调用的是子类的函数。如果需要通过子类对象调用基类的同名函数,需要使用作用域解析运算符::来明确指定。

重写:

当通过基类指针或引用来调用虚函数时,实际调用的是指针或引用所指向的对象的函数(即运行时多态)。如果指针或引用指向的是子类对象,则调用的是子类重写后的函数。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值