php中拷貝構(gòu)造函數(shù)、賦值運算符重載
更新時間:2012年07月25日 15:29:34 作者:
php中拷貝構(gòu)造函數(shù)、賦值運算符重載方法, 需要的朋友可以參考下
對象的賦值與復(fù)制: 賦值:通過“ = ”運算符重載
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ū)別,賦值是對一個已經(jīng)存在的對象進(jìn)行賦值(已經(jīng)實現(xiàn)定義了被賦值的對象),而復(fù)制是從無到有建立一個新的對象,并使它與已有的對象相同。
淺復(fù)制與深復(fù)制: 若對象中有指針成員,在復(fù)制時,只會將該指針成員的地址復(fù)制給新建立的對象,因此,兩個對象中的指針成員都指向了同一塊內(nèi)存區(qū)域,在釋放時會出現(xiàn)重復(fù)釋放的問題。 需要手動定義復(fù)制構(gòu)造函數(shù),在構(gòu)造函數(shù)中將為指針變量分配新的內(nèi)存,是不同對象的指針成員指向不同的內(nèi)存區(qū)域。
用到拷貝構(gòu)造函數(shù)的三種情況: 1、需要建立一個新對象,并用另一個同類對象對其進(jìn)行初始化 2、函數(shù)的參數(shù)為類的對象時,在調(diào)用函數(shù)時需要建立一個實參的拷貝,按實參復(fù)制一個形參,系統(tǒng)是通過調(diào)用拷貝構(gòu)造函數(shù)實現(xiàn)的 3、函數(shù)的返回值是類的對象:函數(shù)調(diào)用結(jié)束時,需要將函數(shù)中的對象復(fù)制一個臨時對象,并傳給該函數(shù)的調(diào)用處。
User getUser()
{
User temp;
return temp;
}
int main()
{
User user = getUser();//調(diào)用getUser();
}
getUser()函數(shù)調(diào)用結(jié)束時,getUser中建立的對象temp的生命周期結(jié)束(即將銷毀),所以不是將temp帶回main,而是在執(zhí)行return語句時,調(diào)用User類的拷貝構(gòu)造函數(shù),按temp拷貝一個新的、對象,然后將它賦值給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ū)別,賦值是對一個已經(jīng)存在的對象進(jìn)行賦值(已經(jīng)實現(xiàn)定義了被賦值的對象),而復(fù)制是從無到有建立一個新的對象,并使它與已有的對象相同。
淺復(fù)制與深復(fù)制: 若對象中有指針成員,在復(fù)制時,只會將該指針成員的地址復(fù)制給新建立的對象,因此,兩個對象中的指針成員都指向了同一塊內(nèi)存區(qū)域,在釋放時會出現(xiàn)重復(fù)釋放的問題。 需要手動定義復(fù)制構(gòu)造函數(shù),在構(gòu)造函數(shù)中將為指針變量分配新的內(nèi)存,是不同對象的指針成員指向不同的內(nèi)存區(qū)域。
用到拷貝構(gòu)造函數(shù)的三種情況: 1、需要建立一個新對象,并用另一個同類對象對其進(jìn)行初始化 2、函數(shù)的參數(shù)為類的對象時,在調(diào)用函數(shù)時需要建立一個實參的拷貝,按實參復(fù)制一個形參,系統(tǒng)是通過調(diào)用拷貝構(gòu)造函數(shù)實現(xiàn)的 3、函數(shù)的返回值是類的對象:函數(shù)調(diào)用結(jié)束時,需要將函數(shù)中的對象復(fù)制一個臨時對象,并傳給該函數(shù)的調(diào)用處。
復(fù)制代碼 代碼如下:
User getUser()
{
User temp;
return temp;
}
int main()
{
User user = getUser();//調(diào)用getUser();
}
getUser()函數(shù)調(diào)用結(jié)束時,getUser中建立的對象temp的生命周期結(jié)束(即將銷毀),所以不是將temp帶回main,而是在執(zhí)行return語句時,調(diào)用User類的拷貝構(gòu)造函數(shù),按temp拷貝一個新的、對象,然后將它賦值給user.
您可能感興趣的文章:
- php面向?qū)ο蟮姆椒ㄖ剌d兩種版本比較
- php繼承中方法重載(覆蓋)的應(yīng)用場合
- PHP使用方法重載實現(xiàn)動態(tài)創(chuàng)建屬性的get和set方法
- PHP利用func_get_args和func_num_args函數(shù)實現(xiàn)函數(shù)重載實例
- PHP小技巧之函數(shù)重載
- PHP實現(xiàn)重載的常用方法實例詳解
- PHP面相對象中的重載與重寫
- PHP面向?qū)ο蟪绦蛟O(shè)計重載(overloading)操作詳解
- PHP面向?qū)ο蟪绦蛟O(shè)計模擬一般面向?qū)ο笳Z言中的方法重載(overload)示例
- php魔術(shù)函數(shù)__call()用法實例分析
- PHP __call()方法實現(xiàn)委托示例
- php 使用 __call實現(xiàn)重載功能示例
相關(guān)文章
老版本PHP轉(zhuǎn)義Json里的特殊字符的函數(shù)
本文給大家分享的是一則在老版本的php里使用的PHP轉(zhuǎn)義Json里的特殊字符的函數(shù),雖然不是很實用了,但還是記錄一下,有需要的小伙伴可以參考下。2015-06-06php實現(xiàn)與python進(jìn)行socket通信的方法示例
這篇文章主要介紹了php實現(xiàn)與python進(jìn)行socket通信的方法,結(jié)合實例形式分析了php使用自定義類發(fā)送socket請求數(shù)據(jù)及Python接收socket數(shù)據(jù)并處理請求等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08PHP中substr()與explode()函數(shù)用法分析
這篇文章主要介紹了PHP中substr()與explode()函數(shù)用法分析,以實例的形式較為詳細(xì)的講述了substr()與explode()函數(shù)處理字符串的技巧,是字符串操作中使用頻率比較高的函數(shù),具有一定的實用價值,需要的朋友可以參考下2014-11-11剛才在簡化php的庫,結(jié)果發(fā)現(xiàn)很多東西
剛才在簡化php的庫,結(jié)果發(fā)現(xiàn)很多東西...2006-12-12實例講解通過PHP創(chuàng)建數(shù)據(jù)庫
在本篇文章里小編給大家分享了關(guān)于如何通過​PHP創(chuàng)建數(shù)據(jù)庫的知識點內(nèi)容,有需要的朋友們學(xué)習(xí)下。2019-01-01