C++6個默認成員函數(shù)-創(chuàng)新互聯(lián)

問題:C++中的空類,默認情況下會產生哪些類成員函數(shù)?

成都創(chuàng)新互聯(lián)公司主營黃石網站建設的網絡公司,主營網站建設方案,重慶APP軟件開發(fā),黃石h5微信小程序定制開發(fā)搭建,黃石網站營銷推廣歡迎黃石等地區(qū)企業(yè)咨詢

   系統(tǒng)默認的缺省構造函數(shù)和拷貝構造函數(shù)(復制構造函數(shù))

   系統(tǒng)默認提供的析構函數(shù).

   系統(tǒng)默認的運算符重載函數(shù)(拷貝賦值函數(shù)):用于同類對象之間的賦值.

   系統(tǒng)默認的取值運算:當對類的對象進行取地址(&)時會被調用.

1.構造函數(shù)法和析構函數(shù)存在的必要性和作用:

(1).構造函數(shù)的必要性和作用(用構造函數(shù)確保初始化):

    1. 解決同種類型的不同對象的初始化問題.

    2. 保證每個對象的數(shù)據(jù)成員都有合適的初始值。

(2).析構函數(shù)的必要性和作用(用析構函數(shù)確保清除):

    1. 回收內存和資源,通常用于釋放在構造函數(shù)或對象生命期內獲取的資源。

    2. 當對象超出它的定義范圍時,編譯器自動調用析構函數(shù).

2.構造函數(shù)和析構函數(shù)的種類:

(1).一個類可以有多個構造函數(shù)(即構造函數(shù)的重載).

 a. 缺省構造函數(shù):不帶任何參數(shù)的構造函數(shù).

  當編譯器需要創(chuàng)建一個對象而又不知任何細節(jié)時,缺省的構造函數(shù)就顯得非常重要.在一個構造類型中沒有構造函數(shù)時,編譯器會自動創(chuàng)建一個,然而,一旦有其他的構造函數(shù)之后就沒有缺省構造函數(shù).

 b. 重載的構造函數(shù):帶參數(shù)的構造函數(shù).

  屬于類成員函數(shù)的重載,通過參數(shù)的個數(shù),類型和順序形成重載的條件.其中特殊情況是:

    如果類中有其他的構造函數(shù)的話,系統(tǒng)就不會提供默認的缺省構造函數(shù)以構造對象.

    如果類中構造函數(shù)帶有默認參數(shù)的話,防止出現(xiàn)重載二義性而出錯.            類中的構造函數(shù)形成重載時,注意防止重載函數(shù)中存在隱式類型轉換而出現(xiàn)重載的二義性.

 c. 拷貝構造函數(shù)(復制構造函數(shù)):

   分為系統(tǒng)提供默認的復制構造函數(shù)(即淺拷貝或者全盤拷貝),以及自定義的復制構造函數(shù)(即深拷貝或者部分拷貝).

(2).一個類只有一個析構函數(shù)(即析構函數(shù)不存在重載),

   析構函數(shù)也分為系統(tǒng)默認的和自定義的析構函數(shù)(完成指定的其他功能).

3.關于拷貝構造函數(shù)(復制構造函數(shù))具體知識點:

(1).定義格式:

 類名 (類名+&對象)

{

}

特點:無返回值,參數(shù)只有且只能是同類對象的引用.

解疑:為什么不允許定義這種形式 A(A copy) 的拷貝構造函數(shù)?

  這個拷貝構造函數(shù)在參數(shù)傳遞的過程中又要調用拷貝構造函數(shù)本身,而調用拷貝構造函數(shù)時又要先進行參數(shù)傳遞,參數(shù)傳遞又要調用拷貝構造函數(shù)。。。。。。于是陷入不停的分配堆棧的無限遞歸中,而每次壓棧過程中又嵌套了壓棧,致使每一次的壓棧都不能完成,因此,編譯器通過不了這種形式的拷貝構造函數(shù)。

(2).拷貝構造函數(shù)和賦值運算符重載的比較:

不同的地方:

    a.拷貝構造函數(shù)是在對象被創(chuàng)建并用另一個已經存在的對象來初始化它時調用的;

   如string s1 = "Hello World";

    string s2 = s1;  //等價于string s2(s1);

    b.拷貝賦值函數(shù)只能把一個對象賦值給另一個已經存在的對象,使得那個已經存在的對象具有和源對象相同的狀態(tài)。

    如 string s3;

    s3 = s1;

相同的地方:

    默認的拷貝構造函數(shù)和默認的賦值運算符重載均采用“按成員拷貝”默認方式來實現(xiàn)。

    以類String的兩個對象a、b為例。假設a.m_data的內容為“Hello”,b.m_data的內容為“world”。現(xiàn)將a賦值給b,默認賦值運算符重載的“按成員拷貝”意味著執(zhí)行b.m_data=a.m_data。這將造成三個錯誤:

(1)b.m_data原持有的內存沒有被釋放,造成內存泄漏。

(2)b.m_data和a.m_data指向同一塊內存區(qū)域,a或b任何一方變動都會影響另一方

(3)在對象被析構時,m_data被delete了兩次。

4.構造函數(shù)的初始化列表知識點:

1).初始化列表的構造順序:

   初始化列表中個數(shù)據(jù)成員的構造順序與其聲明的順序一致.而不是按照出現(xiàn)在初始化列表的順序相關.

2.)必須使用初始化列表的情況?

  引用(const)成員和reference類型的成員只能被初始化而不能在初始化列表外進行賦值操作.

  類的繼承中基類的構造函數(shù)必須通過初始化列表來調用(先調用基類構造函數(shù),然后才是自身的構造函數(shù)).

  類的聚合中聚合類的嵌套對象的構造可以放在其構造函數(shù)體內進行賦值而不必一定初始化才行,和普通的成員變量一致.

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網頁題目:C++6個默認成員函數(shù)-創(chuàng)新互聯(lián)
URL標題:http://muchs.cn/article46/cddeeg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供品牌網站制作、Google、電子商務、標簽優(yōu)化、網站營銷網站導航

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務器托管