日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C++構(gòu)造函數(shù)相關使用方式解讀

我們今天將會為大家詳細介紹一下有關C++構(gòu)造函數(shù)的基本應用方式。希望初學者們可以通過本文介紹的內(nèi)容充分掌握這方面的知識,以便在將來實際應用中獲得幫助,并且在一定程度上加深對這一語言的認知程度。#t#

專注于為中小企業(yè)提供網(wǎng)站設計、成都網(wǎng)站設計服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)新會免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

我們知道,當定義一個對象時,會按順序做2件事情:

1)分配好內(nèi)存(非靜態(tài)數(shù)據(jù)成員是未初始化的)

2)調(diào)用C++構(gòu)造函數(shù)(構(gòu)造函數(shù)的本意就是初始化非靜態(tài)數(shù)據(jù)成員)

顯然上面代碼中,CLS obj;這里已經(jīng)為obj分配了內(nèi)存,然后調(diào)用默認構(gòu)造函數(shù),但是默認構(gòu)造函數(shù)還未執(zhí)行完,卻調(diào)用了另一個構(gòu)造函數(shù),這樣相當于產(chǎn)生了一個匿名的臨時CLS對象,它調(diào)用CLS(int)構(gòu)造函數(shù),將這個匿名臨時對象自己的數(shù)據(jù)成員m_i初始化為0;但是obj的數(shù)據(jù)成員并沒有得到初始化。于是obj的m_i是未初始化的,因此其值也是不確定的

從這里,我們歸納如下:

1)在c++里,由于構(gòu)造函數(shù)允許有默認參數(shù),使得這種C++構(gòu)造函數(shù)調(diào)用構(gòu)造函數(shù)來重用代碼的需求大為減少

2)如果僅僅為了一個構(gòu)造函數(shù)重用另一個構(gòu)造函數(shù)的代碼,那么完全可以把構(gòu)造函數(shù)中的公共部分抽取出來定義一個成員函數(shù)(推薦為private),然后在每個需要這個代碼的構(gòu)造函數(shù)中調(diào)用該函數(shù)即可

3)偶爾我們還是希望在類的構(gòu)造函數(shù)里調(diào)用另一個構(gòu)造函數(shù),可以按下面方式做:

在C++構(gòu)造函數(shù)里調(diào)用另一個構(gòu)造函數(shù)的關鍵是讓第二個構(gòu)造函數(shù)在第一次分配好的內(nèi)存上執(zhí)行,而不是分配新的內(nèi)存,這個可以用標準庫的placement new做到:

先看看標準庫中placement new的定義

 
 
 
  1. inline void *__cdecl operator new(size_t, void *_P)  
  2. {  
  3. return (_P);   
  4. }  

可見沒有分配新的內(nèi)存。

正確的方式:

 
 
 
  1. struct CLS  
  2. {  
  3. int m_i;  
  4. CLS( int i ) : m_i(i){}  
  5. CLS()  
  6. {  
  7. new (this)CLS(0);  
  8. }  
  9. }; 

另: 若C++構(gòu)造函數(shù)調(diào)用自身,則會出現(xiàn)無限遞歸調(diào)用,是不允許的


分享題目:C++構(gòu)造函數(shù)相關使用方式解讀
文章地址:http://www.5511xx.com/article/djddigj.html