绝不重新定义继承而来的no-virtual函数——effective c++学习笔记
2011-05-14 09:33
232 查看
绝不重新定义继承而来的no-virtual函数(Never redefine an inherited no-virtual function.)
如果这样处理,那么这个函数的调用,将取决于指针的类型,而不是对象本身。因为no-virtual函数都是静态绑定的(在编译器绑定),而virtual函数是动态绑定(在运行期根据对象来绑定的)。
这样做违背两个原则:
1、 适用于基类对象的每一件事情,都要适用于其子类。
2、 基类的子类一定要继承no-virtual函数的接口和实现。
我认为如果发生这种行为,C++编译器应该提示错误。但是C++的设计者如此设计这个特性,可能是有他的考虑(是什么考虑那?更大的灵活性?)。不过这个考虑为程序员多加了很多负担。
有一个想法,也许可以根据Effective的这55个条款,写一个设计检查工具。通过扫描代码,如果不满足条款,则告警。
相关文章推荐
- Effective C++ 条款36 绝不重新定义继承而来的non-virtual函数
- [条款36]绝不重新定义继承而来的non-virtual函数
- 《Effective C++》Rule36:绝不重新定义继承而来的non-virtual函数
- 条款36:绝不重新定义继承而来的non-virtual函数
- 读书笔记_Effective_C++_条款三十六:绝不重新定义继承而来的non-virtual函数
- Effective C++ -----条款36:绝不重新定义继承而来的non-virtual函数
- 条款36:绝不重新定义继承而来的non-virtual函数
- 绝不重新定义继承而来的non-virtual函数
- 读书笔记《Effective C++》条款36:绝不重新定义继承而来的non-virtual函数
- 条款36:绝不重新定义继承而来的non-virtual函数(Never redefine an inherited non-virtual function)
- 《Effective C++》读书笔记之item36:绝不重新定义继承而来的non-virtual函数
- effective C++ 条款 36:绝不重新定义继承而来的non-virtual函数
- [EffectiveC++]item36:绝不重新定义继承而来的non-virtual函数
- Effective C++条款36解读: 绝不重新定义继承而来的non-virtual函数
- Effective C++:条款36:绝不重新定义继承而来的non-virtual函数
- Effective C++条款 37:绝不重新定义继承而来的缺省参数值
- 读书笔记_Effective_C++_条款三十七:绝不重新定义继承而来的缺省参数值
- Effective C++条款 37:绝不重新定义继承而来的缺省参数值
- 面试题:一个短小强悍的C++面试题---违背Effective C++的条款37:绝不重新定义继承而来的缺省参数值
- Effective C++:条款37:绝不重新定义继承而来的缺省参数值