C/C++編程筆記:高級C++知識 |虛擬副本構(gòu)造器
在虛擬構(gòu)造函數(shù)中,我們看到了構(gòu)造對象的方法,該對象的類型直到運(yùn)行時(shí)才確定。是否可以在不知道其確切類類型的情況下創(chuàng)建對象?該虛擬拷貝構(gòu)造函數(shù)解決這個(gè)問題。

有時(shí)我們可能需要從另一個(gè)現(xiàn)有對象構(gòu)造一個(gè)對象。精確地,復(fù)制構(gòu)造函數(shù)執(zhí)行相同的操作。新對象的初始狀態(tài)將基于另一個(gè)現(xiàn)有對象狀態(tài)。從另一個(gè)對象實(shí)例化一個(gè)對象時(shí),編譯器將調(diào)用復(fù)制構(gòu)造函數(shù)。但是,編譯器需要具體的類型信息來調(diào)用適當(dāng)?shù)母北緲?gòu)造函數(shù)。
如果我們不能決定要從哪種對象類型進(jìn)行復(fù)制,該怎么辦?例如,虛擬構(gòu)造函數(shù)根據(jù)某些輸入在運(yùn)行時(shí)創(chuàng)建類層次結(jié)構(gòu)的對象。當(dāng)我們想從虛擬構(gòu)造函數(shù)創(chuàng)建的另一個(gè)對象中復(fù)制構(gòu)造一個(gè)對象時(shí),我們不能使用通常的復(fù)制構(gòu)造函數(shù)。我們需要一個(gè)特殊的克隆函數(shù),該函數(shù)可以在運(yùn)行時(shí)復(fù)制對象。
例如,考慮一個(gè)繪圖應(yīng)用程序。您可以選擇一個(gè)已經(jīng)在畫布上繪制的對象,然后粘貼同一對象的另一個(gè)實(shí)例。從程序員的角度來看,我們無法確定哪個(gè)對象將被復(fù)制粘貼,因?yàn)樗沁\(yùn)行時(shí)決策。我們需要虛擬副本構(gòu)造函數(shù)來提供幫助。
同樣,考慮剪貼板應(yīng)用。剪貼板可以容納不同類型的對象,并從現(xiàn)有對象復(fù)制對象,然后將其粘貼到應(yīng)用程序畫布上。同樣,要復(fù)制的對象類型是運(yùn)行時(shí)決策。虛擬副本構(gòu)造函數(shù)填補(bǔ)了這里的空白。請參見下面的示例:
用戶類借助虛擬構(gòu)造函數(shù)創(chuàng)建對象。要創(chuàng)建的對象基于用戶輸入。Action()?正在復(fù)制正在創(chuàng)建的對象并修改其屬性。借助Clone()虛擬函數(shù)創(chuàng)建的重復(fù)對象,該虛擬函數(shù)也被視為虛擬副本構(gòu)造函數(shù)。Clone()方法背后的概念是原型模式的基礎(chǔ)。
以上就是今天的全部內(nèi)容了。每日分享小知識,希望對你有幫助~
另外如果你想更好的提升你的編程能力,學(xué)好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~
微信公眾號:C語言編程學(xué)習(xí)基地
分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!
