問題來源于,我最早看到好多代碼類都用Impl用作后綴后來看到這其實來源于中條款31:支持編譯依存最小化的一般構(gòu)想是:相依于聲明式,不要相依于定義式,基于此構(gòu)想的兩個手段是Handleclasses和Interfaceclasses.至于Impl一般用于提供類的具體實現(xiàn),用指針進(jìn)行封裝,看完了,理解了這種類接口和實現(xiàn)思路,但是不知所以然.具體,書中問題代碼如下,private下包括私有函數(shù)都是類的實現(xiàn)細(xì)節(jié),依賴的頭文件改變,那么此類必須重編#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;}作者給出了這種的實現(xiàn),如下:#include#includeclassPersonImpl;classDate;classaddress;classPerson{public://///////////private:std::tr1::shared_ptrpImpl;}這樣的設(shè)計之下,Person的客戶端就完全與Dates,Addresses以及Person的實現(xiàn)細(xì)目分離了.那些classes的任何實現(xiàn)修改都不需要Person客戶端重新編譯.不太明白,就算PersonImpl包裝了address等實現(xiàn)細(xì)節(jié),運行中new了一個PersonImpl對象實現(xiàn).但是編譯的時候如果address等類有更改,PersonImpl不也跟著更改了么,而且Pserson和PersonImpl一般也放在一個cpp里面定義,不懂哪里節(jié)省編譯了.這塊有點糊涂.各位指點一二.
為什么用指針完成類實現(xiàn)會將文件間的依存關(guān)系降低?
蝴蝶不菲
2019-04-21 20:20:39