【36】绝不重新定义继承而来的non-virtual方法
1、绝不重新定义继承而来的non-virtual方法,为什么?
首先想想,non-virtual方法是干什么的?也就是说,它的使用场景。父类的non-virtual方法,其实就是告诉子类,继承实现,子类决定是否继承接口(也就是子类决定是否继续提供接口)。如果重新定义了non-virtual方法,就不符合它的使用场景。
2、如果想重新定义继承而来的方法,应该把父类方法修改为virtual方法,因为virtual方法的使用场景是:父类告诉子类,继承接口,修改实现。
3、如果重新定义了继承而来的non-virtual方法,会出现什么问题呢?
因为non-virtual方法是静态绑定,也就是说,调用non-virtual方法的时候,根据对象的表面类型决议方法,我们知道一个对象的表面类型是可以变来变去的。这样,就表现出神经分裂的不一致行为。
【36】绝不重新定义继承而来的non-virtual方法的更多相关文章
- [条款36]绝不重新定义继承而来的non-virtual函数
看下面的两个类的声明代码: class B { public: void mf(); //something to do }; class D : public B { public: void mf ...
- 《effective C++》:条款36——绝不重新定义继承而来的非虚函数
(1)当派生类中重写了基类的非虚函数时,这个时候这个函数发生的是静态绑定 下面中的代码中: 定义一个基类B,基类定义了函数fcm,fcm是非虚的函数. 定义一个派生类D,派生类重新定义了fcm. 当用 ...
- [EffectiveC++]item37:绝不重新定义继承而来的缺省参数值
绝不重新定义继承而来的缺省参数值 静态类型 动态类型
- 《effective C++》:条款37——绝不重新定义继承而来的缺省参数值
引子: 阿里的一道题: #include <IOSTREAM> using namespace std; class A{ public: ) { cout<<"a~ ...
- C++ 静态绑定与动态绑定------绝不重新定义继承而来的缺省参数
在了解静态绑定和动态绑定之前,先了解什么是对象的静态类型,什么是对象的动态类型. 对象的静态类型:对象在声明时采用的类型.是在编译器决定的. 对象的动态类型:目前所指对象的类型.是在运行期决定的. 动 ...
- Effective C++ -----条款36:绝不重新定义继承而来的non-virtual函数
绝对不要重新定义继承而来的non-virtual函数.
- 条款36:绝不重新定义继承而来的non-virtual函数(Never redefine an inherited non-virtual function)
NOTE: 1.绝对不要重新定义继承而来的non-virtual函数.
- 条款37:绝不重新定义继承而来的缺省参数值(Never redefine a function's inherited default parameter value)
NOTE: 1.绝不重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定的,而virtual 函数-----你唯一应该覆盖的东西----却是动态绑定的.
- Effective C++ -----条款37:绝不重新定义继承而来的缺省参数值
绝对不要重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定,而virtual函数-----你唯一应该覆写的东西-----却是动态绑定.
随机推荐
- Playing with cubes II
Description: Hey Codewarrior! You already implemented a Cube class, but now we need your help again! ...
- 使用Zxing实现扫二维码描
1.集成Zxing.bar 2.复制代码到项目中 3.修改 MipacActivityCapture.java 的扫描结果方法 handleDecode() /** * 处理扫描结果,实现活动页面跳 ...
- android LayoutInflater和inflate()方法的用法(转载)
原文出处:http://www.cnblogs.com/top5/archive/2012/05/04/2482328.html 在实际开发中LayoutInflater这个类还是非常有用的,它的作用 ...
- 优秀it博客和文章
优秀博客 综合 杨文博(供职于百度公司,任复合搜索部资深研发工程师,目前作为tech lead,负责垂直行业搜索后端架构研发.) 杨远骋 徐宥(Google 软件工程师. 这个中文博客是我的思考记录, ...
- java jvm学习笔记三(class文件检验器)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验 ...
- 记录一次Jmeter性能测试
一.引言 之前有总结过如何写Java请求测试用例类,写完测试脚本调通之后,信心满满地以为我准备好可以开始性能测试了.结果在评审测试计划的时候,当即被项目组狠狠的扇了一耳光,各种不确定的点:性能指标不明 ...
- 黑盒测试用例设计方法&理论联系实际-> 功能图法
一. 概念 功能图由状态迁移图和布尔函数组成.状态迁移图用状态和迁移来描述.一个状态指出数据输入的位置(或时间),而迁移则指明状态的改变.同时要依靠判定表或因果图表示的逻辑功能.例,一个简化的自动出纳 ...
- 烧写u_boot系统和linux系统
今天下午准备烧写一下u_boot还有linux系统,因为是笔记本电脑,吐槽一下,笔记本电脑的usb转串口不是怎么稳定,dnw下对应的驱动也不怎么好用,导致在笔记本电脑上烧写系统的成功率比较低,本来三点 ...
- delphi获取mdb密码
function GetPasswordFromAccess(AFileName: string): string;var myms: TMemoryStream; b: array of Byt ...
- POM详细配置
POM的全称是“ProjectObjectModel(项目对象模型)”. pom.xml详解 声明规范 <projectxmlns="http://maven.apache.org/P ...