第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么用指針完成類實現(xiàn)會將文件間的依存關(guān)系降低?

為什么用指針完成類實現(xiàn)會將文件間的依存關(guān)系降低?

蝴蝶不菲 2019-04-21 20:20:39
問題來源于,我最早看到好多代碼類都用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é)省編譯了.這塊有點糊涂.各位指點一二.
查看完整描述

2 回答

?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗 獲得超2個贊

這個叫PIMPLidiom,在大型C++項目里極為常見,減少編譯時間只是其中一個好處。更多請見IsthepImplidiomreallyusedinpractice?
就你的例子而言:
針對前面那種實現(xiàn),隨便對Person,Date,Address進(jìn)行一點點修改,所有引用person.h的文件都必須全部編譯。引用的一多,編譯時間大的無法想象。
針對后面那種實現(xiàn),之前可能對Person的修改轉(zhuǎn)移到cpp中的PersonImpl中,對于Date和Address的直接頭文件引用,也都改為了前置聲明。你無論改變PersonImpl,Date,Address,都不會對所有引用person.h的文件造成影響(它們都不需要重新編譯)。
當(dāng)person.h是一個非常重要、且常用的接口。那么節(jié)省的編譯時間是非常巨大的。
這玩意其實不局限于C++中,往大了說,是橋接模式。極為常見的設(shè)計模式。
                            
查看完整回答
反對 回復(fù) 2019-04-21
  • 2 回答
  • 0 關(guān)注
  • 275 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號