国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

C++ 中繼承與動(dòng)態(tài)內(nèi)存分配的詳解

2020-01-26 13:57:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

C++ 中繼承與動(dòng)態(tài)內(nèi)存分配的詳解

繼承是怎樣與動(dòng)態(tài)內(nèi)存分配進(jìn)行互動(dòng)的呢?例如,如果基類(lèi)使用動(dòng)態(tài)內(nèi)存分配,并重新定義賦值和復(fù)制構(gòu)造函數(shù),這將怎樣影響派生類(lèi)的實(shí)現(xiàn)呢?這個(gè)問(wèn)題的答案取決于派生類(lèi)的屬性。如果派生類(lèi)也使用動(dòng)態(tài)內(nèi)存分配,那么就需要學(xué)習(xí)幾個(gè)新的小技巧。下面來(lái)看看這兩種情況:

一.派生類(lèi)不使用new

派生類(lèi)是否需要為顯示定義析構(gòu)函數(shù),復(fù)制構(gòu)造函數(shù)和賦值操作符呢?

不需要!

首先,來(lái)看是否需要析構(gòu)函數(shù),如果沒(méi)有定義析構(gòu)函數(shù),編譯器將定義一個(gè)不執(zhí)行任何操作的默認(rèn)構(gòu)造函數(shù)。實(shí)際上,派生類(lèi)的默認(rèn)構(gòu)造函數(shù)總是要執(zhí)行一些操作:執(zhí)行自身的代碼后調(diào)用基類(lèi)析構(gòu)函數(shù)。因?yàn)槲覀兗僭O(shè)派生類(lèi)的成員不需要執(zhí)行任何特殊操作,所以默認(rèn)析構(gòu)函數(shù)是合適的。

再看復(fù)制構(gòu)造函數(shù)。默認(rèn)復(fù)制構(gòu)造函數(shù)執(zhí)行成員復(fù)制,這對(duì)于動(dòng)態(tài)內(nèi)存分配來(lái)說(shuō)是不合適的,但對(duì)于新的派生類(lèi)的成員來(lái)說(shuō)是合適的。因此只需要考慮繼承的基類(lèi)的對(duì)象。要知道,成員復(fù)制將根據(jù)數(shù)據(jù)類(lèi)型采用相應(yīng)的復(fù)制方式,因此復(fù)制類(lèi)成員或繼承的類(lèi)組件時(shí),則是使用該類(lèi)的復(fù)制構(gòu)造函數(shù)完成的。所以派生類(lèi)的默認(rèn)復(fù)制構(gòu)造函數(shù)使用基類(lèi)的顯示復(fù)制構(gòu)造函數(shù)來(lái)復(fù)制派生類(lèi)對(duì)象的基類(lèi)成員部分。因此,默認(rèn)復(fù)制構(gòu)造函數(shù)對(duì)于新的派生類(lèi)而言是合適的。

對(duì)于賦值來(lái)說(shuō),同樣道理。

二.派生類(lèi)使用new。

如果派生類(lèi)需要new操作,那么需要顯示定義析構(gòu)函數(shù),復(fù)制構(gòu)造函數(shù)和賦值操作符。

派生類(lèi)析構(gòu)函數(shù)自動(dòng)調(diào)用基類(lèi)的構(gòu)造函數(shù),故其自身的職責(zé)是對(duì)派生類(lèi)構(gòu)造函數(shù)執(zhí)行工作的進(jìn)行清理。

接下來(lái)看復(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)基類(lèi)和派生類(lèi)都采用動(dòng)態(tài)內(nèi)存分配時(shí),派生類(lèi)的析構(gòu)函數(shù),復(fù)制構(gòu)造函數(shù)以及賦值操作符都必須使用想用的基類(lèi)方法來(lái)處理基類(lèi)元素。這種要求是通過(guò)三種不同的方式來(lái)滿足的。

1.對(duì)于析構(gòu)函數(shù),這是自動(dòng)完成的;

2.對(duì)于構(gòu)造函數(shù),這是通過(guò)在初始化成員列表中調(diào)用基類(lèi)的復(fù)制構(gòu)造函數(shù)來(lái)完成的;如果不是這樣做,將自動(dòng)調(diào)用基類(lèi)的默認(rèn)構(gòu)造函數(shù)。

3.對(duì)于復(fù)制操作符,這是通過(guò)使用作用域解析操作符顯示的調(diào)用基類(lèi)的賦值操作符來(lái)完成了。

以上就是C++ 中繼承與動(dòng)態(tài)內(nèi)存分配的詳解,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 万盛区| 蓝山县| 台山市| 郑州市| 育儿| 瑞金市| 大荔县| 沙湾县| 南陵县| 郸城县| 临沧市| 巫溪县| 新化县| 安溪县| 保德县| 湾仔区| 临武县| 鄱阳县| 西充县| 建平县| 金昌市| 遵义市| 乌什县| 内丘县| 丽水市| 宁乡县| 邵武市| 西华县| 濉溪县| 达拉特旗| 新泰市| 高邑县| 莱州市| 和龙市| 双辽市| 茂名市| 监利县| 杨浦区| 林州市| 监利县| 桦川县|