C++中的PIMPL和NVI
来源:互联网 发布:软件测试中软件的定义 编辑:程序博客网 时间:2024/05/19 06:35
PIMP(指针成员指向实现,接口与实现分离)和NVI(非虚拟接口,私有虚函数)都是为了将不变的代码控制,需要变化的部分单独用一个函数包裹起来,PIMPL使用的委托,不过NVI使用的继承而已。
下面的Dowork() 具体工作,在不同的继承类中细化,可以是变化的,不过控制代码是不变的,这样即使Dowork() 需要修改,Base类却不需要编译,基类拥有控制权.
虚函数是动态绑定的,所以只要不是在类外部调用虚函数,仅类内部调用虚函数无所谓访问控制,最终调用的都是派生类的虚函数。
class Base{public : void Work(void) { ... // <-此处可以加入控制代码 DoWork(); ... // <-此处可以加入控制代码 } private: virtual void DoWork(void) = 0;};
B即使需要修改,只要B的共有接口不变,pimpl总是个指针,对A 的布局不会发生影响,所以A自身不需要修改,使用A的类也不需要发生修改,也就不需要重新编译:
class A{public: void func() { //此处加入不变的控制代码 pimpl->func(); //此处加入不变的控制代码 }private: B* pimpl;};
这样降低了耦合,也实现了信息的隐藏。
0 0
- C++中的PIMPL和NVI
- NVI
- NVI
- 【effective C++】NVI继承下,
- C++开发中的pImpl方法
- C++开发中的pImpl方法
- C++开发中的pImpl方法
- NVI和函数指针代替虚函数
- pimpl
- pimpl
- PIMPL
- pimpl
- pimpl
- PIMPL
- 柴郡猫技术--C++中的PIMPL设计模式
- C++中的PImpl的技巧及其作用
- 2篇关于c++pImpl 的文章
- PIMPL设计模式的理解和使用
- 安卓中的帧布局
- Spatial Pyramid Pooling in Deep Convolutional --- Spp_net
- flex不使用自动滚动,使用固定高度宽度套用也是一种方案
- PL/SQL 9 注册码
- 伊斯坦布尔之旅第一天:蓝色清真寺和圣索菲亚博物馆
- C++中的PIMPL和NVI
- 如何做到通过Struts2完成Submit但是画面不跳转
- javascript的正则表达式
- HTC one M9 查看CID
- 高级调试技巧
- 无线基本概述(二)
- mysql 自定义函数
- 水果市场里面水果如何保鲜
- 解决hessian com.caucho.hessian.io.hessianprotocolexception 异常