问题来源于,我最早看到好多代码类都用Impl用作后缀后来看到这其实来源于中条款31: 支持编译依存最小化的一般构想是:相依于声明式,不要相依于定义式,基于此构想的两个手段是Handleclasses和Interfaceclasses.至于Impl一般用于提供类的具体实现,用指针进行封装,看完了,理解了这种类接口和实现思路,但是不知所以然.具体,书中问题代码如下,private下包括私有函数都是类的实现细节,依赖的头文件改变,那么此类必须重编#include #include"date.h"#include"address.h"classPerson{public:Person(conststd::string&name,constDate&birthday,constAddress&addr);std::stringname()const;std::stringbirthDate()const;std::stringaddress()const;private:std::stringtheName;DatetheBirthDate;AddresstheAddress;}作者给出了这种的实现,如下:#include #include classPersonImpl;classDate;classaddress;classPerson{public://///////////private:std::tr1::shared_ptrpImpl; }这样的设计之下,Person的客户端就完全与Dates,Addresses以及Person的实现细目分离了.那些classes的任何实现修改都不需要Person客户端重新编译.不太明白,就算PersonImpl包装了address等实现细节,运行中new了一个PersonImpl对象实现.但是编译的时候如果address等类有更改,PersonImpl不也跟着更改了么,而且Pserson和PersonImpl一般也放在一个cpp里面定义,不懂哪里节省编译了.这块有点糊涂.各位指点一二.
慕婉清6462132
相关分类