構(gòu)造函數(shù):它在創(chuàng)建類對(duì)象時(shí)會(huì)自動(dòng)被調(diào)用,用于構(gòu)造類對(duì)象。如果程序員沒有編寫構(gòu)造函數(shù),則c++會(huì)自動(dòng)提供一個(gè),當(dāng)然程序員在創(chuàng)建類時(shí)通常會(huì)編寫自己的構(gòu)造函數(shù)。
構(gòu)造函數(shù)名稱必須與他所屬類的名稱相同,構(gòu)造函數(shù)不允許有返回類型。DEMO::DEMO()
析構(gòu)函數(shù)什么時(shí)候加virtual?
首先virtual用于類的多態(tài),當(dāng)設(shè)計(jì)一個(gè)類,用做其他類的父類時(shí),且有virtual修飾的方法,這些方法可被子類覆蓋定義,此時(shí)的析構(gòu)函數(shù)必須加virtual。原因如下:上述場(chǎng)景一般使用工廠設(shè)計(jì)模式,定義一個(gè)父類的指針,指向子類的對(duì)象,而在delete父類指針時(shí),期望釋放對(duì)象。但父類析構(gòu)函數(shù)不加virtual修飾,則只會(huì)調(diào)用父類析構(gòu)函數(shù),而不調(diào)用子類析構(gòu)函數(shù),導(dǎo)致無法釋放子類部分
拷貝構(gòu)造函數(shù):
一種特殊的構(gòu)造函數(shù),它在創(chuàng)建對(duì)象時(shí),使用用一類中之前創(chuàng)建的對(duì)象來初始化新創(chuàng)建的對(duì)象??截悩?gòu)造函數(shù)通常用于:
- 通過使用另一個(gè)同類型的對(duì)象來初始化新創(chuàng)建的對(duì)象
- 復(fù)制對(duì)象把他作為參數(shù)傳遞給函數(shù)
- 復(fù)制對(duì)象,并從函數(shù)返回這個(gè)對(duì)象
如果在類中沒有定義拷貝構(gòu)造函數(shù),編譯器會(huì)自行定義一個(gè)。如果類帶有指針變量,并有動(dòng)態(tài)內(nèi)存分配,則他必須有一個(gè)拷貝構(gòu)造函數(shù)。
classname (const classname &obj) {
// 構(gòu)造函數(shù)的主體
}