国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C/C++編程筆記:高級C++知識 | 虛擬構(gòu)造器

2021-05-04 20:40 作者:C語言編程__Plus  | 我要投稿

我們可以在C ++中使類構(gòu)造函數(shù)虛擬化以創(chuàng)建多態(tài)對象嗎?不會。C++是靜態(tài)類型的(RTTI的目的有所不同)語言,對于C ++編譯器來說,多態(tài)創(chuàng)建對象是沒有意義的。編譯器必須知道創(chuàng)建對象的類類型。換句話說,從C ++編譯器的角度來看,要創(chuàng)建哪種類型的對象是編譯時的決定。如果我們將構(gòu)造函數(shù)設(shè)為虛擬,則編譯器會標(biāo)記錯誤。實際上,除了inline之外,構(gòu)造函數(shù)的聲明中不允許其他關(guān)鍵字。


在實際情況下,我們需要基于一些輸入在類層次結(jié)構(gòu)中創(chuàng)建派生類對象。換句話說,對象創(chuàng)建和對象類型緊密耦合,這迫使修改擴(kuò)展。虛擬構(gòu)造器的目的是使對象創(chuàng)建與類型脫鉤。

我們?nèi)绾卧谶\行時創(chuàng)建所需的對象類型?例如,請參見下面的示例程序。


在以上示例中,假定層次結(jié)構(gòu)Base,Derived1和Derived2是庫代碼的一部分。User類是試圖利用層次結(jié)構(gòu)的實用程序類。的主要功能是消耗基地經(jīng)由層級的功能?的用戶?類。

該用戶類構(gòu)造函數(shù)創(chuàng)建Derived1對象,始終。如果用戶的使用者(在我們的例子中是主要用戶)需要Derived2功能,則用戶需要創(chuàng)建“?new Derived2()?”并強(qiáng)制重新編譯。重新編譯是不好的設(shè)計方法,因此我們可以選擇以下方法。

在詳細(xì)介紹之前,讓我們回答一下,誰將指示創(chuàng)建Derived1或Derived2對象?顯然,它是User類的使用者。該用戶類可以使用的if-else梯的創(chuàng)建或者Derived1或Derived2的,如下面的示例所示:


上面的代碼*不*開放擴(kuò)展,這是一種不靈活的設(shè)計。簡而言之,如果庫使用新類Derived3更新基類層次結(jié)構(gòu)。User類如何創(chuàng)建Derived3對象?一種方法是更新基于新輸入ID 3來創(chuàng)建Derived3對象的if-else階梯,如下所示,


上面的修改迫使User類的用戶重新編譯,不好的(不靈活的)設(shè)計!并且不會因基礎(chǔ)擴(kuò)展而關(guān)閉用戶類的進(jìn)一步修改。

問題在于對象的創(chuàng)建。將新類添加到層次結(jié)構(gòu)中,從而強(qiáng)制重新編譯User類的依賴項。我們不能將創(chuàng)建對象的操作委托給類層次結(jié)構(gòu)本身或虛擬行為的函數(shù)嗎?通過將對象創(chuàng)建委托給類層次結(jié)構(gòu)(或靜態(tài)函數(shù)),我們可以避免User和Base層次結(jié)構(gòu)之間的緊密耦合。理論足夠,請參見以下代碼,


該用戶類是獨立的對象創(chuàng)建的。它將責(zé)任委托給Base,并以ID的形式提供輸入。如果庫添加了新的類Derived4,則庫修改器將擴(kuò)展Create內(nèi)的if-else梯形圖以返回正確的對象。消費者用戶不需要重新編譯他們的代碼由于延長基地。

請注意,函數(shù)Create用于在運行時返回不同類型的基類對象。它的作用類似于虛擬構(gòu)造函數(shù),在模式術(shù)語中也稱為Factory Method。

模式世界展示了實現(xiàn)上述概念的不同方法。

以上就是今天的全部內(nèi)容了。每日分享小知識,希望對你有幫助~

另外如果你想更好的提升你的編程能力,學(xué)好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~

微信公眾號:C語言編程學(xué)習(xí)基地

分享(源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)

歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!



C/C++編程筆記:高級C++知識 | 虛擬構(gòu)造器的評論 (共 條)

分享到微博請遵守國家法律
石台县| 保定市| 津市市| 恩施市| 滨州市| 旅游| 海淀区| 桐城市| 大安市| 冷水江市| 浦城县| 灵丘县| 南通市| 平乡县| 邵武市| 葵青区| 苏州市| 南昌市| 寻乌县| 沈丘县| 荃湾区| 延长县| 福建省| 阿荣旗| 张家川| 江达县| 三门县| 竹北市| 华蓥市| 舒兰市| 清原| 奎屯市| 铜梁县| 报价| 德保县| 桃园市| 东乡族自治县| 乌兰浩特市| 保德县| 凯里市| 镇江市|