《Effective C++》35:考虑virtual函数以外的其他选择
来源:互联网 发布:php 数组函数 编辑:程序博客网 时间:2024/06/09 17:04
1、借由 Non-Virtual Interface(NVI) 手法实现 Template Method 模式
NVI手法将虚函数作为private的,然后用非虚函数作为接口来调用这个虚函数。这样就把虚函数封装起来了。
如:
//令客户通过调用public的非虚函数间接地调用private的虚函数。class Widget{public: //这种作为虚函数与外界的交接的函数,被Scott Meyers称为virtual函数的外覆器(wrapper) void Draw() //派生类不重新定义这个函数{ ... // Do something... DoDraw(); ... // Do something...}private:virtual void DoDraw() //派生类可以重新定义这个函数{...... //缺省的内容}};
另外,加上private的虚函数的一个测试:
// Rule35:考虑virtual函数以外的其他选择#include <iostream>#include <string>using namespace std;class B{private:virtual void DoShow(){cout << "I'm a Base." << endl;}public:void Show(){DoShow();}};class D : public B{private:virtual void DoShow(){cout << "I'm a Derive." << endl;}};int main(){D d;d.Show();B* p = new D;p->Show();B b;b.Show();return 0;}运行结果:
对于上述结果,《Effective C++》上有这样的解释:“重新定义函数”表示解释某些事“怎么”完成,而“调用函数”则表示它“何时”被完成。
这些事都是各自独立互不相干的。因此私有的virtual函数可以在子类中被重写,而不可以在子类中被调用。
2、借由 Function Pointers 实现Strategy模式
1 0
- 《Effective C++》35:考虑virtual函数以外的其他选择
- Effective C++:条款35:考虑virtual函数以外的其他选择
- 《Effective C++》:条款35:考虑virtual函数以外的其他选择
- 读书笔记《Effective C++》条款35:考虑virtual函数以外的其他选择
- C++之考虑virtual函数以外的其他选择(35)---《Effective C++》
- 《Effective C++》读书笔记之item35:考虑virtual函数以外的其他选择
- 考虑virtual函数以外的其他选择(Effective C++_35)
- 考虑virtual函数以外的其他选择
- 考虑Virtual函数以外的其他选择
- 条款35:考虑virtual函数以外的其他选择
- 条款35:考虑virtual函数以外的其他选择
- 条款35:考虑virtual函数以外的其他选择
- 条款35:考虑virtual函数以外的其他选择
- 条款35 考虑virtual函数以外的其他选择(virtual函数的替代方案)
- item35: 考虑virtual函数以外的其他选择
- Effective C++ Item 35 考虑 virtual 函数以外的实现
- 条款35(考虑virtual函数以外的其他选择)之Template Method模式
- 条款35: 考虑virtual函数以外的选择
- JVM系列四:生产环境参数实例及分析【生产环境实例增加中】
- WebServer类,常用于连接内网用
- 3D Touch详细实例介绍之二
- 源码阅读笔记(由Stack顺藤摸瓜)
- 自动释放池详解
- 《Effective C++》35:考虑virtual函数以外的其他选择
- glDepthFunc
- spark&hbase integration
- 同时跑两个TOMCAT
- Android View的事件分发机制(一):View
- JVM系列五:JVM监测&工具
- iOS开发之Bug汇总
- 一个IC卡数据准备tags解析器
- Redis系列-存储篇hash主要操作函数小结