绝不重新定义继承而来的no-virtual函数——effective c++学习笔记

  绝不重新定义继承而来的no-virtual函数(Never redefine an inherited no-virtual function.

如果这样处理,那么这个函数的调用,将取决于指针的类型,而不是对象本身。

因为no-virtual函数都是静态绑定的(在编译器绑定),而virtual函数是动态绑定(在运行期根据对象来绑定的)。

这样做违背两个原则:

1、 适用于基类对象的每一件事情,都要适用于其子类。

2、 基类的子类一定要继承no-virtual函数的接口和实现。

我认为如果发生这种行为,C++编译器应该提示错误。但是C++的设计者如此设计这个特性,可能是有他的考虑(是什么考虑那?更大的灵活性?)。不过这个考虑为程序员多加了很多负担。

有一个想法,也许可以根据Effective的这55个条款,写一个设计检查工具。通过扫描代码,如果不满足条款,则告警。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值