php中拷貝構(gòu)造函數(shù)、賦值運(yùn)算符重載
更新時(shí)間:2012年07月25日 15:29:34 作者:
php中拷貝構(gòu)造函數(shù)、賦值運(yùn)算符重載方法, 需要的朋友可以參考下
對(duì)象的賦值與復(fù)制: 賦值:通過(guò)“ = ”運(yùn)算符重載
User a(10),b;
b = a;
復(fù)制:調(diào)用復(fù)制構(gòu)造函數(shù)
User b;
User a(b);
或者
User a = b;//相當(dāng)于User a(b);
與賦值的區(qū)別,賦值是對(duì)一個(gè)已經(jīng)存在的對(duì)象進(jìn)行賦值(已經(jīng)實(shí)現(xiàn)定義了被賦值的對(duì)象),而復(fù)制是從無(wú)到有建立一個(gè)新的對(duì)象,并使它與已有的對(duì)象相同。
淺復(fù)制與深復(fù)制: 若對(duì)象中有指針成員,在復(fù)制時(shí),只會(huì)將該指針成員的地址復(fù)制給新建立的對(duì)象,因此,兩個(gè)對(duì)象中的指針成員都指向了同一塊內(nèi)存區(qū)域,在釋放時(shí)會(huì)出現(xiàn)重復(fù)釋放的問(wèn)題。 需要手動(dòng)定義復(fù)制構(gòu)造函數(shù),在構(gòu)造函數(shù)中將為指針變量分配新的內(nèi)存,是不同對(duì)象的指針成員指向不同的內(nèi)存區(qū)域。
用到拷貝構(gòu)造函數(shù)的三種情況: 1、需要建立一個(gè)新對(duì)象,并用另一個(gè)同類對(duì)象對(duì)其進(jìn)行初始化 2、函數(shù)的參數(shù)為類的對(duì)象時(shí),在調(diào)用函數(shù)時(shí)需要建立一個(gè)實(shí)參的拷貝,按實(shí)參復(fù)制一個(gè)形參,系統(tǒng)是通過(guò)調(diào)用拷貝構(gòu)造函數(shù)實(shí)現(xiàn)的 3、函數(shù)的返回值是類的對(duì)象:函數(shù)調(diào)用結(jié)束時(shí),需要將函數(shù)中的對(duì)象復(fù)制一個(gè)臨時(shí)對(duì)象,并傳給該函數(shù)的調(diào)用處。
User getUser()
{
User temp;
return temp;
}
int main()
{
User user = getUser();//調(diào)用getUser();
}
getUser()函數(shù)調(diào)用結(jié)束時(shí),getUser中建立的對(duì)象temp的生命周期結(jié)束(即將銷毀),所以不是將temp帶回main,而是在執(zhí)行return語(yǔ)句時(shí),調(diào)用User類的拷貝構(gòu)造函數(shù),按temp拷貝一個(gè)新的、對(duì)象,然后將它賦值給user.
User a(10),b;
b = a;
復(fù)制:調(diào)用復(fù)制構(gòu)造函數(shù)
User b;
User a(b);
或者
User a = b;//相當(dāng)于User a(b);
與賦值的區(qū)別,賦值是對(duì)一個(gè)已經(jīng)存在的對(duì)象進(jìn)行賦值(已經(jīng)實(shí)現(xiàn)定義了被賦值的對(duì)象),而復(fù)制是從無(wú)到有建立一個(gè)新的對(duì)象,并使它與已有的對(duì)象相同。
淺復(fù)制與深復(fù)制: 若對(duì)象中有指針成員,在復(fù)制時(shí),只會(huì)將該指針成員的地址復(fù)制給新建立的對(duì)象,因此,兩個(gè)對(duì)象中的指針成員都指向了同一塊內(nèi)存區(qū)域,在釋放時(shí)會(huì)出現(xiàn)重復(fù)釋放的問(wèn)題。 需要手動(dòng)定義復(fù)制構(gòu)造函數(shù),在構(gòu)造函數(shù)中將為指針變量分配新的內(nèi)存,是不同對(duì)象的指針成員指向不同的內(nèi)存區(qū)域。
用到拷貝構(gòu)造函數(shù)的三種情況: 1、需要建立一個(gè)新對(duì)象,并用另一個(gè)同類對(duì)象對(duì)其進(jìn)行初始化 2、函數(shù)的參數(shù)為類的對(duì)象時(shí),在調(diào)用函數(shù)時(shí)需要建立一個(gè)實(shí)參的拷貝,按實(shí)參復(fù)制一個(gè)形參,系統(tǒng)是通過(guò)調(diào)用拷貝構(gòu)造函數(shù)實(shí)現(xiàn)的 3、函數(shù)的返回值是類的對(duì)象:函數(shù)調(diào)用結(jié)束時(shí),需要將函數(shù)中的對(duì)象復(fù)制一個(gè)臨時(shí)對(duì)象,并傳給該函數(shù)的調(diào)用處。
復(fù)制代碼 代碼如下:
User getUser()
{
User temp;
return temp;
}
int main()
{
User user = getUser();//調(diào)用getUser();
}
getUser()函數(shù)調(diào)用結(jié)束時(shí),getUser中建立的對(duì)象temp的生命周期結(jié)束(即將銷毀),所以不是將temp帶回main,而是在執(zhí)行return語(yǔ)句時(shí),調(diào)用User類的拷貝構(gòu)造函數(shù),按temp拷貝一個(gè)新的、對(duì)象,然后將它賦值給user.
您可能感興趣的文章:
- php面向?qū)ο蟮姆椒ㄖ剌d兩種版本比較
- php繼承中方法重載(覆蓋)的應(yīng)用場(chǎng)合
- PHP使用方法重載實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建屬性的get和set方法
- PHP利用func_get_args和func_num_args函數(shù)實(shí)現(xiàn)函數(shù)重載實(shí)例
- PHP小技巧之函數(shù)重載
- PHP實(shí)現(xiàn)重載的常用方法實(shí)例詳解
- PHP面相對(duì)象中的重載與重寫
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)重載(overloading)操作詳解
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)模擬一般面向?qū)ο笳Z(yǔ)言中的方法重載(overload)示例
- php魔術(shù)函數(shù)__call()用法實(shí)例分析
- PHP __call()方法實(shí)現(xiàn)委托示例
- php 使用 __call實(shí)現(xiàn)重載功能示例
相關(guān)文章
php str_getcsv把字符串解析為數(shù)組的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇php str_getcsv把字符串解析為數(shù)組的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
PHP同時(shí)連接多個(gè)mysql數(shù)據(jù)庫(kù)示例代碼
這篇文章主要介紹了PHP同時(shí)連接多個(gè)mysql數(shù)據(jù)庫(kù)的具體實(shí)現(xiàn),需要的朋友可以參考下2014-03-03
php array_walk() 數(shù)組函數(shù)
函數(shù)array_walk():單一數(shù)組回調(diào)函數(shù)---對(duì)數(shù)組中的每個(gè)成員應(yīng)用用戶函數(shù)2011-07-07
PHP中實(shí)現(xiàn)Bloom Filter算法
這篇文章主要介紹了PHP中實(shí)現(xiàn)Bloom Filter算法,本文直接給出實(shí)現(xiàn)代碼,代碼中給出詳細(xì)注釋,Bloom Filter算法介紹等內(nèi)容,需要的朋友可以參考下2015-03-03

