偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

C++構(gòu)造函數(shù)相關(guān)使用方式解讀

開發(fā) 后端
C++構(gòu)造函數(shù)允許默認(rèn)參數(shù),可以使C++構(gòu)造函數(shù)調(diào)用構(gòu)造函數(shù)來重用代碼的需求大大減少。在操作中我們需要注意一些細(xì)節(jié)問題,在這里都會一一介紹。

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

我們知道,當(dāng)定義一個(gè)對象時(shí),會按順序做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)用默認(rèn)構(gòu)造函數(shù),但是默認(rèn)構(gòu)造函數(shù)還未執(zhí)行完,卻調(diào)用了另一個(gè)構(gòu)造函數(shù),這樣相當(dāng)于產(chǎn)生了一個(gè)匿名的臨時(shí)CLS對象,它調(diào)用CLS(int)構(gòu)造函數(shù),將這個(gè)匿名臨時(shí)對象自己的數(shù)據(jù)成員m_i初始化為0;但是obj的數(shù)據(jù)成員并沒有得到初始化。于是obj的m_i是未初始化的,因此其值也是不確定的

從這里,我們歸納如下:

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

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

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

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

先看看標(biāo)準(zhǔn)庫中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)用,是不允許的

責(zé)任編輯:曹凱 來源: 博客園
相關(guān)推薦

2010-02-01 11:01:30

C++靜態(tài)構(gòu)造函數(shù)

2010-01-25 14:00:27

C++類

2010-01-27 10:13:22

C++類對象

2010-02-03 15:46:15

C++函數(shù)傳遞

2010-02-05 16:46:58

C++ TinyXml

2010-01-27 17:16:52

C++構(gòu)造函數(shù)

2023-11-28 11:51:01

C++函數(shù)

2010-01-28 10:49:22

C++構(gòu)造函數(shù)

2010-02-01 11:22:09

C++虛函數(shù)

2025-02-06 13:23:09

C++函數(shù)參數(shù)

2010-02-04 16:39:26

C++析構(gòu)函數(shù)

2010-01-27 16:10:32

C++靜態(tài)構(gòu)造函數(shù)

2010-01-22 11:13:16

C++靜態(tài)

2010-01-21 11:23:58

C++函數(shù)調(diào)用

2010-01-25 14:43:00

C++構(gòu)造函數(shù)

2010-01-25 17:05:37

C++語言

2010-02-04 16:07:39

C++回調(diào)函數(shù)

2009-08-13 17:30:30

C#構(gòu)造函數(shù)

2010-02-03 17:06:36

C++對象復(fù)制

2010-01-20 14:25:56

函數(shù)調(diào)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號