這篇文章主要介紹C++中繼承與動態(tài)內(nèi)存分配的示例分析,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供耒陽網(wǎng)站建設(shè)、耒陽做網(wǎng)站、耒陽網(wǎng)站設(shè)計、耒陽網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、耒陽企業(yè)網(wǎng)站模板建站服務(wù),十多年耒陽做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
一.派生類不使用new
派生類是否需要為顯示定義析構(gòu)函數(shù),復(fù)制構(gòu)造函數(shù)和賦值操作符呢?
不需要!
首先,來看是否需要析構(gòu)函數(shù),如果沒有定義析構(gòu)函數(shù),編譯器將定義一個不執(zhí)行任何操作的默認(rèn)構(gòu)造函數(shù)。實際上,派生類的默認(rèn)構(gòu)造函數(shù)總是要執(zhí)行一些操作:執(zhí)行自身的代碼后調(diào)用基類析構(gòu)函數(shù)。因為我們假設(shè)派生類的成員不需要執(zhí)行任何特殊操作,所以默認(rèn)析構(gòu)函數(shù)是合適的。
再看復(fù)制構(gòu)造函數(shù)。默認(rèn)復(fù)制構(gòu)造函數(shù)執(zhí)行成員復(fù)制,這對于動態(tài)內(nèi)存分配來說是不合適的,但對于新的派生類的成員來說是合適的。因此只需要考慮繼承的基類的對象。要知道,成員復(fù)制將根據(jù)數(shù)據(jù)類型采用相應(yīng)的復(fù)制方式,因此復(fù)制類成員或繼承的類組件時,則是使用該類的復(fù)制構(gòu)造函數(shù)完成的。所以派生類的默認(rèn)復(fù)制構(gòu)造函數(shù)使用基類的顯示復(fù)制構(gòu)造函數(shù)來復(fù)制派生類對象的基類成員部分。因此,默認(rèn)復(fù)制構(gòu)造函數(shù)對于新的派生類而言是合適的。
對于賦值來說,同樣道理。
二.派生類使用new。
如果派生類需要new操作,那么需要顯示定義析構(gòu)函數(shù),復(fù)制構(gòu)造函數(shù)和賦值操作符。
派生類析構(gòu)函數(shù)自動調(diào)用基類的構(gòu)造函數(shù),故其自身的職責(zé)是對派生類構(gòu)造函數(shù)執(zhí)行工作的進(jìn)行清理。
接下來看復(fù)制構(gòu)造函數(shù):
DerivedClass::DerivedClass(const DerivedClass& de):BaseClass(de) { //....... }
看賦值操作符:
DerivedClass::operator=(const DerivedClass& de) { if(this == &de) return *this; BaseClass::operator=(de); //.......... }
總之,當(dāng)基類和派生類都采用動態(tài)內(nèi)存分配時,派生類的析構(gòu)函數(shù),復(fù)制構(gòu)造函數(shù)以及賦值操作符都必須使用想用的基類方法來處理基類元素。這種要求是通過三種不同的方式來滿足的。
1.對于析構(gòu)函數(shù),這是自動完成的;
2.對于構(gòu)造函數(shù),這是通過在初始化成員列表中調(diào)用基類的復(fù)制構(gòu)造函數(shù)來完成的;如果不是這樣做,將自動調(diào)用基類的默認(rèn)構(gòu)造函數(shù)。
3.對于復(fù)制操作符,這是通過使用作用域解析操作符顯示的調(diào)用基類的賦值操作符來完成了。
以上是“C++中繼承與動態(tài)內(nèi)存分配的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!