`
kuwoleft
  • 浏览: 1075043 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

绝不重新定义继承而来的no-virtual函数(Neverredefineaninheritedno-virtualfunction.

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

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

这样做违背两个原则:

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

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

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

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

<!--EndFragment-->
分享到:
评论

相关推荐

    第8章-- virtual函数 与多态

    第8章--virtual函数与多态

    Effective C++ 中文版

    条款36:绝不重新定义继承而来的non-virtual函数 条款37:绝不重新定义继承而来的缺省参数值 条款38:通过复合塑模出has-a或“根据某物实现出” 条款39:明智而审慎地使用private继承 条款40:明智而审慎地使用...

    react-virtual-list:超简单的虚拟化列表React组件

    react-virtual-list允许您显示固定高度项目的大列表,而仅使这些项目在屏幕上可见。 这允许使用少得多的DOM元素呈现大列表。其他好处: 一个依赖项(它是prop-types ) 性能-演示页面几乎总是保持60fps以上的速度 将...

    C++ 内存布局虚继承 ---Empty virtual base classs (空虚基类)

    C++ 内存布局虚继承 ---Empty virtual base classs (空虚基类).doc

    前端开源库-webpack-virtual-modules

    前端开源库-webpack-virtual-modulesWebpack虚拟模块、Webpack虚拟模块

    More Effective C++.pdf

    又要有效率,又要有弹性,又要前瞻望远,又要回溯相容,又要能治大国,又要能烹小鲜,学习起来当然就不可能太简单。 在如此庞大复杂的机制下,万千使用者前仆後续的动力是:一旦学成,妙用无穷。C++ 相关书籍之多,...

    Effective C++(第三版)

    条款36:绝不重新定义继承而来的non-virtual函数 never redefine an inherited non-virtual function. 条款37:绝不重新定义继承而来的缺省参数值 never redefine a function's inherited default parameter value. ...

    前端开源库-virtual-html

    前端开源库-virtual-html虚拟HTML,将给定的HTML转换为虚拟DOM对象

    C++析构函数使用virtual的原因

    C++析构函数使用virtual的原因

    MSRMesh-VirtualWIFI.exe

    MSRMesh-VirtualWIFI用于将几个无线节点聚集在一起的工具。

    More Effective C++

    和其前一本兄弟书籍 Effective C++一样,More Effective C++对每一位以C++为开发工具的程序员而言,都必备读物。  继 Effective C++ 之後,Scott Meyers 於 1996 推出这本「续集」。条款变得比较少,页数倒是多了...

    VNC-Viewer 5.2.3——远程桌面连接工具(Linux版)

    VNC (Virtual Network Console)是虚拟网络控制台的缩写。它 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的。VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件,远程控制能力强大,高效...

    [VRTK V2.2.1]VRTK - Virtual Reality Toolkit.zip

    虚拟现实工具包插件

    vue-virtual-scroller::high_voltage:大量数据快速滚动

    虚拟虚拟卷轴 快速滚动任意数量的数据| |赞助商目录安装npm install --save vue-virtual-scroller :warning: 现在, vue-virtual-scroller使用在显示时自动刷新自身,以防止显示故障。 这意味着您需要包括vue-...

    free-virtual-serial-port-tools.zip

    free virtual serial port tools 免费 功能强大

    C++中的虚函数(virtual function).doc

    C++中的虚函数(virtual function).doc virtual function

    More Effective C++中文版

     全面地描述了C++专家所使用的高级技术,包括placement new、virtual constructors、smart pointers、reference counting、proxy classes和double-dispatching等。  以实例说明异常处理带给C++类和函数的冲击。  ...

    EFFECTIVE c++ 第二版

    我最初的興趣在於整理出一些可被某種「lint-like 程式」施行的規則,最後我甚至領導一個計劃,研究某種可將C++ 原始碼中違反使用者指定條件之處檢驗出來的工具(你可以在Effective C++ 網站上找到此研究的一份概要報...

    More Effective C++中文pdf

    继 Effective C++ 之後,Scott Meyers 於 1996 推出这本「续集」。条款变得比较少,页数倒是多了一些,原因是这次选材比「第一集」更高阶,尤其是第五章。Meyers 将此章命名为技术(Techniques),并明白告诉你,...

    hotspot-virtual-machine-garbage-collection-tuning-guide.pdf

    The Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide describes the garbage collection methods included in the Java HotSpot Virtual Machine (Java HotSpot VM) and ...

Global site tag (gtag.js) - Google Analytics