Derived class重新定义继承而来的Private Virtual函数

本文深入探讨了在面向对象编程中,基类拥有一个公有函数和一个私有虚函数时,如何通过非虚接口(NVI)让派生类重新定义私有虚函数,以及这一手法在实际编程中的意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基类有一个公有函数,也有一个私有的虚函数,共有函数调用此私有虚函数,那么,当派生类继承基类时,派生类可重写此私有虚函数,然后当派生类对象调用healthValue()时,doHealthValue()将调用派生类重写的doHealthValue()。这种手法称为non-virtual interface(NVI)。这个non-virtual函数(healyhValue)称为virtual函数(doHealthValue)的外覆器。

NVI涉及在Derived classes内重新定义private virtual函数,重新定义若干个Derived class并不调用的函数!!这里并不矛盾。“重新定义virtual 函数”表示某些事“如何”完成,“调用virtual 函数”则表示它“何时”被完成。这些事情都是各自独立互不相关的。NVI允许Derived class重新定义virtual函数,从而赋予它们“如何实现机能”的控制能力,但Base class保留诉说“函数何时被调用”的权力。所以,Derived class可重新定义继承而来的private virtual函数是合情合理的。

(来自Effective C++)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值