最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++構(gòu)造函數(shù)的類型,淺拷貝與深拷貝詳解

 更新時間:2022年03月30日 11:31:45   作者:小子挺不錯  
這篇文章主要為大家詳細(xì)介紹了C++構(gòu)造函數(shù)的類型,淺拷貝與深拷貝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

一、無參構(gòu)造函數(shù)

1.如果沒有定義構(gòu)造函數(shù),則系統(tǒng)自動調(diào)用此默認(rèn)構(gòu)造函數(shù),且什么都不做。

2.如果用戶自定義了帶參數(shù)的構(gòu)造函數(shù),若還想調(diào)用無參的構(gòu)造函數(shù),必須顯示定義

person() {
	cout << "this object is being created." << endl;
}

二、含參構(gòu)造函數(shù)

一般構(gòu)造函數(shù)可以有各種參數(shù)形式,一個類可以有多個一般構(gòu)造函數(shù),前提是參數(shù)的個數(shù)或者類型不同(基于c++的重載函數(shù)原理)

person(string ID, int age, int height, string sex) {
	cout<<"含參構(gòu)造函數(shù)調(diào)用"<< endl;
	this.ID = ID;
	this.age = age;
	this.height = height;
	this.sex = sex;
}

含參的構(gòu)造函數(shù)還可以使用快速初始化的方法:

person(string ID, int age, int height, string sex) : ID(ID), age(age), height(height), sex(sex) { }

注意:

  • 初始化參數(shù)列表和初始化順序不可以變動
  • 變量名稱(不是參數(shù)列表名稱)一定要和成員變量名一樣

三、拷貝構(gòu)造函數(shù)

使用已經(jīng)創(chuàng)建好的同一類對象,進行構(gòu)造另一個對象。

person(const person &p) {
	cout << "拷貝構(gòu)造函數(shù)調(diào)用" << endl;
	this->ID = p.ID;
	this->age = p.age;
	this->height = p.height;
	this->sex = p.sex;
}

注意:

但當(dāng)類中有指針成員時,由系統(tǒng)默認(rèn)創(chuàng)建該復(fù)制構(gòu)造函數(shù)會存在風(fēng)險,具體原因請查詢有關(guān) “淺拷貝“

四、深拷貝和淺拷貝

淺拷貝,指的是在對象復(fù)制時,只對對象中的數(shù)據(jù)成員進行簡單的賦值,默認(rèn)拷貝構(gòu)造函數(shù)執(zhí)行的也是淺拷貝。

例如: person p2 = p1; 這就是淺拷貝,將p1中的成員變量值賦給p2,在這里其實就相當(dāng)于拷貝構(gòu)造函數(shù)的調(diào)用。

但是,淺拷貝,在成員變量是引用類型(指針)時,會出現(xiàn)問題。

  • 傳參問題中,地址傳遞后可以實現(xiàn)swap函數(shù)的調(diào)用,這就是淺拷貝的原理
  • 當(dāng)我們使用淺拷貝時,引用類型傳遞的依舊是地址,這也就是說,拷貝后的對象和拷貝的對象中引用對象指向同一塊地址,這樣就出現(xiàn)問題了。

在“深拷貝”的情況下,對于對象中動態(tài)成員,就不能僅僅簡單地賦值了,而應(yīng)該重新動態(tài)分配空間。

如果一個類擁有資源,當(dāng)這個類的對象發(fā)生復(fù)制過程的時候,資源重新分配,這個過程就是深拷貝。

上面提到,如果沒有自定義復(fù)制構(gòu)造函數(shù),則系統(tǒng)會創(chuàng)建默認(rèn)的復(fù)制構(gòu)造函數(shù),但系統(tǒng)創(chuàng)建的默認(rèn)復(fù)制構(gòu)造函數(shù)只會執(zhí)行“淺拷貝”,即將被拷貝對象的數(shù)據(jù)成員的值一一賦值給新創(chuàng)建的對象,若該類的數(shù)據(jù)成員中有指針成員,則會使得新的對象的指針?biāo)赶虻牡刂放c被拷貝對象的指針?biāo)赶虻牡刂废嗤琩elete該指針時則會導(dǎo)致兩次重復(fù)delete而出錯。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C?++迭代器iterator在string中使用方法介紹

    C?++迭代器iterator在string中使用方法介紹

    迭代器是一種檢查容器內(nèi)元素并遍歷元素的數(shù)據(jù)類型。迭代器是一個變量,提供對一個容器中的對象的(間接)訪問方法,并且定義了容器中對象的范圍。迭代器可以指向容器中的某個元素,通過迭代器就可以對非數(shù)組(存儲空間不連續(xù))的數(shù)據(jù)結(jié)構(gòu)進行遍歷
    2022-10-10
  • C語言利用EasyX實現(xiàn)繪制足球圖案

    C語言利用EasyX實現(xiàn)繪制足球圖案

    這篇文章主要為大家詳細(xì)介紹了C語言如何利用EasyX繪圖庫實現(xiàn)繪制一個簡單的足球圖案,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-11-11
  • C++實現(xiàn)簡單的信息管理系統(tǒng)

    C++實現(xiàn)簡單的信息管理系統(tǒng)

    這篇文章主要為大家介紹了C++實現(xiàn)簡單的信息管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • C++超詳細(xì)講解拷貝構(gòu)造函數(shù)

    C++超詳細(xì)講解拷貝構(gòu)造函數(shù)

    我們經(jīng)常會用一個變量去初始化一個同類型的變量,那么對于自定義的類型也應(yīng)該有類似的操作,那么創(chuàng)建對象時如何使用一個已經(jīng)存在的對象去創(chuàng)建另一個與之相同的對象呢
    2022-06-06
  • 一文搞懂Codec2框架解析

    一文搞懂Codec2框架解析

    這篇文章主要介紹了Codec2框架解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C語言實現(xiàn)通訊錄的方法(包括靜態(tài)版本和動態(tài)版本)

    C語言實現(xiàn)通訊錄的方法(包括靜態(tài)版本和動態(tài)版本)

    本文給大家分享C語言實現(xiàn)通訊錄的方法(包括靜態(tài)版本和動態(tài)版本),針對每種方法給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-09-09
  • C++二叉樹的前序中序后序非遞歸實現(xiàn)方法詳細(xì)講解

    C++二叉樹的前序中序后序非遞歸實現(xiàn)方法詳細(xì)講解

    前序遍歷的順序是根、左、右。任何一顆樹都可以認(rèn)為分為左路節(jié)點,左路節(jié)點的右子樹。先訪問左路節(jié)點,再來訪問左路節(jié)點的右子樹。把訪問左路節(jié)點的右子樹看成一個子問題,就可以完整遞歸訪問了
    2023-03-03
  • 通俗易懂的C++前綴和與差分算法圖文示例詳解

    通俗易懂的C++前綴和與差分算法圖文示例詳解

    這篇文章主要為大家非常通俗易懂的講解了C++前綴和與差分算法的圖文分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2021-11-11
  • Cocos2d-x中背景音樂和音效使用實例

    Cocos2d-x中背景音樂和音效使用實例

    這篇文章主要介紹了Cocos2d-x中背景音樂和音效使用實例,注意本文中使用大量注釋來說明背景音樂和音效的使用方法,需要的朋友可以參考下
    2014-09-09
  • Matlab實現(xiàn)數(shù)據(jù)的動態(tài)顯示方法

    Matlab實現(xiàn)數(shù)據(jù)的動態(tài)顯示方法

    這篇文章主要為大家詳細(xì)介紹了Matlab使用Plot函數(shù)實現(xiàn)數(shù)據(jù)動態(tài)顯示方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06

最新評論

甘洛县| 咸丰县| 九龙县| 金乡县| 方城县| 油尖旺区| 平安县| 永平县| 菏泽市| 买车| 惠来县| 缙云县| 罗甸县| 临西县| 开封市| 高要市| 灵石县| 无棣县| 凭祥市| 岑巩县| 兰坪| 阿拉善右旗| 腾冲县| 称多县| 建宁县| 南靖县| 邓州市| 长乐市| 颍上县| 株洲市| 上高县| 湖口县| 邵武市| 广昌县| 福鼎市| 开封市| 徐州市| 白城市| 和顺县| 博湖县| 油尖旺区|