【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函数-----你唯一应该覆写的东西-----却是动态绑定. 
随机推荐
- UVa 1637 (概率) Double Patience
			题意: 一共有9堆牌,每堆牌四张.每次可以取堆顶点数相同的两张牌,如果有多种方案则选取是随机的. 如果最后将所有牌取完,则视为游戏胜利,求胜利的概率. 分析: 用一个九元组表示状态,分别代表每堆牌剩余 ... 
- [LOJ 1030] Discovering Gold
			B - Discovering Gold Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu ... 
- apache开源项目--TIKA
			Tika是一个内容抽取的工具集合(a toolkit for text extracting).它集成了POI, Pdfbox 并且为文本抽取工作提供了一个统一的界面.其次,Tika也提供了便利的扩展 ... 
- PostgreSql字符串函数和操作符
			本节描述了用于检查和操作字符串数值的函数和操作符.在这个环境中的字符串包括所有 character, character varying, text 类型的值.除非另外说明,所有下面列出的函数都可以处 ... 
- Clone PDB from same CDB
			Clone PDB 用途: 1.用于测试,从生产系统clone数据来进行测试 2.诊断性能问题 Clone PDB Using OMF from same CDB 环境信息: DB Version ... 
- MFC常用类
			CString CStringT 操作可变长度字符串的模板类CStringT有三个实例:CString.CStringA和CStringW,它们分别提供对TCHAR.char和wchar_t字符类型的 ... 
- tomcat 5 启动过程官方文档
			http://tomcat.apache.org/tomcat-7.0-doc/architecture/startup/serverStartup.txt Licensed to the Apach ... 
- bzoj 3123 [Sdoi2013]森林(主席树,lca,启发式合并)
			Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ... 
- 关于Aggregate 的一点用法
			比如 我们要 将数组或者对象中的某列或某属性 的值取出,然后 用 逗号隔开. 1.通常我们可能会用for 或foreach 来循环,然后将取出的值并添加至StringBuilder 2.用Aggreg ... 
- Mac安装wget的两种方法
			 第一种.传统的安装包 A - 从ftp://ftp.gnu.org/gnu/wget/下载到最新的wget安装包到本地 B - 然后通过终端tar -zxvf命令解压到我们某个目录 C - 然后依 ... 
