C++编程规范之39:考虑将虚拟函数生命为非公用的,将公用函数声明为非虚拟的
来源:互联网 发布:软件系统试运行计划 编辑:程序博客网 时间:2024/04/27 22:57
摘要:
在基类中进行修改代码高昂:请将公用函数设为非虚拟的。应该将虚拟函数设为私有的,或者如果派生类需要调用基类版本,则设为保护的。
在面向对象层次结构中进行修改是昂贵的,所以应该实施完整的抽象:将公用函数设为非虚拟的,将虚拟函数设为私有的。这就是所谓的非虚拟接口模式。
公用虚拟函数本质上有两种不同而且互相竞争的职责,针对的是两种不同而且互相竞争的目标:
1.它制定了接口。作为公用函数,它是类向外界提供的接口的一部分。
2.它制定了实现细节。作为虚拟函数,它为派生类替换函数的基类实现提供了一个钩子,它是一个自定义点。
因为这两种职责的动机和目标都不同,所以它们可能会发生冲突,因而从定义上来讲一个函数无法很好地履行两种职责。公用虚拟函数本身有两种on革命性不同的职责和两种互相竞争的目标,这是没有很好地将问题关注点分离的标志。
通过将公用函数与虚拟函数分离,可以获得如下明显的好处。
1.每个接口都能自然成形。将公用函数与自定义接口分离后,每个接口都能很容易地获得符合其自然需求的形式,而不用寻找折中方案,以使他们看上去相同。两个接口经常需要不同数量的函数或不同的参数。
2.基类拥有控制权。基类现在完全控制着其接口和策略,可以实时接口的前后置条件、插入度良性代码,还可以在一个方便的可重用场所中做任何类似的工作。因此,这种为了分离而进行的“预构“能够促进良好的类设计。
3.基类能够健壮地适应变化。以后,我们可以随意改变构思、添加前后条件检查,或者将处理工作分成更多步骤,或者进行重构,或者用Pimpl惯用法实现更完整的接口与实现的分离,或者对基类的可自定义性进行其他修改,而不会影响到使用此类或者从此类继承的任何代码。
- C++编程规范之39:考虑将虚拟函数生命为非公用的,将公用函数声明为非虚拟的
- 的考虑将规范非
- 声明为非成员函数的时机
- 将构造函数和非成员函数虚拟化
- 8.将构造函数和非成员函数“虚拟化”
- 将构造函数和非成员函数虚拟化
- More Effective C++----技巧 & (25)将构造函数和非成员函数虚拟化
- 我的公用函数
- 将 析构函数 声明为 虚函数 的必要性
- C 箴言:多态基类中将析构函数声明为虚拟
- 将重载运算符定义为成员函数还是普通的非成员函数
- 如何将递归函数转化为非递归函数
- 将类的方法声明为虚函数的作用
- 将接口设计为非虚的
- Lua 中,将全局函数声明为local的优缺点
- 三层结构的公用函数
- 一些公用函数的集合
- Effective C++读书笔记---将成员变量声明为Private;宁以非成员、非友元函数替换成员函数
- asp网站制作教程之ASP生成
- Activity鲜为人知的那些事(一)
- 【黑马程序员】C#基础中一些知识点总结备忘
- RTP RTCP在音视频传输与同步方面的使用
- 怎样做研究僧
- C++编程规范之39:考虑将虚拟函数生命为非公用的,将公用函数声明为非虚拟的
- cannot restore segment prot after reloc:Permission denied
- 2014年 --- 新的起点,希望能有新的收获
- Myeclipse 解决启动很慢
- 解决 最近出现的 Failed to fetch URL https://dl-ssl.google.com/android/repository ...
- mac下使用hash_map头文件的方法
- 【黑马程序员】C#面向对象中一些知识点总结和备忘
- Android退出当前应用程序的方法
- 慎用yum remove