欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中的構(gòu)造函數(shù)與析造函數(shù)詳解

 更新時(shí)間:2017年06月26日 14:13:05   作者:ab198604  
這篇文章主要介紹了C++中的構(gòu)造函數(shù)與析造函數(shù)詳解的相關(guān)資料,需要的朋友可以參考下

C++中的構(gòu)造函數(shù)與析造函數(shù)詳解

 構(gòu)造函數(shù)的概念

        (1)構(gòu)造函數(shù)是特殊的成員函數(shù)
        (2)當(dāng)創(chuàng)建類類型的新對(duì)象時(shí),系統(tǒng)自動(dòng)會(huì)調(diào)用構(gòu)造函數(shù)
        (3) 構(gòu)造函數(shù)是為了保證對(duì)象的每個(gè)數(shù)據(jù)成員都被正確的初始化。        

        創(chuàng)建構(gòu)造函數(shù)的注意事項(xiàng):

        (1) 函數(shù)名與類名相同;
        (2) 沒有返回類型,返回類型也不能是void型
        (3) 構(gòu)造函數(shù)通常情況下聲明為public,否則不能像其它成員函數(shù)那樣被顯示的調(diào)用
        (4) 構(gòu)造函數(shù)也可以聲明為private,但是是用作特殊用途-----如單例類singleton時(shí)就是將構(gòu)造函數(shù)聲明為private.
        (5) 構(gòu)造函數(shù)可以有任何類型與任意個(gè)數(shù)的參數(shù),一個(gè)類可以定義多個(gè)構(gòu)造函數(shù)(重載)

        關(guān)于默認(rèn)構(gòu)造函數(shù):

        默認(rèn)構(gòu)造函數(shù)是構(gòu)造函數(shù)的其中一種。除此之外,還有拷貝構(gòu)造函數(shù)與轉(zhuǎn)換構(gòu)造函數(shù),這個(gè)后期再說明。默認(rèn)構(gòu)造函數(shù)是不帶任何參數(shù)的構(gòu)造函數(shù),如果程序中未聲明定義任何一個(gè)構(gòu)造函數(shù),則系統(tǒng)將自動(dòng)產(chǎn)生一個(gè)默認(rèn)的構(gòu)造函數(shù),此時(shí)不會(huì)對(duì)對(duì)象數(shù)據(jù)成員進(jìn)行初始化,那么對(duì)象數(shù)據(jù)成員的值將是隨機(jī)的。而如果我們提供了一個(gè)構(gòu)造函數(shù)(只要是構(gòu)造函數(shù),無論是帶參數(shù)的,還是不帶參數(shù)的,是拷貝還是轉(zhuǎn)換構(gòu)造函數(shù)),哪怕只提供了僅僅一個(gè)構(gòu)造函數(shù),系統(tǒng)就不會(huì)再為我們提供默認(rèn)構(gòu)造函數(shù)了。

        下面是關(guān)于構(gòu)造函數(shù)的類定義:

class Test 
{ 
public: 
  Test(){} //系統(tǒng)不再提供默認(rèn)構(gòu)造函數(shù) 
  Test(int val) //構(gòu)造函數(shù)可以重載 
  { 
    val_ = val ; 
  } 
  ~Test(){} 
 
private: 
  int val_; 
}; 

        下面代碼是Test類的使用:

int main() 
{ 
  Test t1; //系統(tǒng)調(diào)用不帶參數(shù)的默認(rèn)構(gòu)造函數(shù) 
  Test t2(5); //系統(tǒng)調(diào)用帶一個(gè)參數(shù)的構(gòu)造函數(shù) 
   
  Test *t3 = new Test(20); //分配內(nèi)存+調(diào)用帶一個(gè)參數(shù)的構(gòu)造函數(shù),這種操作稱為new operator. 
 
  delete t3; // 調(diào)用析構(gòu)函數(shù)+ 釋放內(nèi)存 
} 

        請(qǐng)注意:全局對(duì)象的構(gòu)造函數(shù)是先于main函數(shù)執(zhí)行的       

析構(gòu)函數(shù)概念

        (1) 函數(shù)名與類名類似,前面多了一個(gè)"~"符號(hào)(取反符)
        (2) 沒有返回類型
        (3) 不能有參數(shù)
        (4) 不能被重載(這個(gè)好理解,因?yàn)闆]有參數(shù),自然不能重載)
        (5) 如果沒有定義析構(gòu)函數(shù),則編譯器會(huì)自動(dòng)生成一個(gè)默認(rèn)的析構(gòu)函數(shù),函數(shù)體是空的。

 析構(gòu)函數(shù)與對(duì)象數(shù)組

        把握一個(gè)原則,構(gòu)造幾個(gè)對(duì)象,就要調(diào)用幾次析構(gòu)函數(shù)。

        拿上面的Test類來進(jìn)行舉例說明:

int main() 
{ 
  Test t[2] = {10,20}; //對(duì)象數(shù)組初始化,創(chuàng)建2個(gè)元素,即2個(gè)Test對(duì)象,分別傳遞初始值為10,20,就是說調(diào)用的是帶一個(gè)參數(shù)的構(gòu)造函數(shù)。由于創(chuàng)建了2個(gè)對(duì)象,構(gòu)造函數(shù)也調(diào)用了兩次 
  Test *t2 = new Test(2); //僅創(chuàng)建一個(gè)對(duì)象,初始值為2,調(diào)用帶一個(gè)參數(shù)的構(gòu)造函數(shù)。 
 
  delete t2; //調(diào)用一次析構(gòu)函數(shù)。 
 
  Test *t3 = new Test[2]; //在堆上創(chuàng)建2個(gè)對(duì)象,無初始值,調(diào)用的是不帶參數(shù)的默認(rèn)構(gòu)造函數(shù),由于是2個(gè)對(duì)象,故調(diào)用了2次。 
 
  delete [] t3; //調(diào)用兩次析構(gòu)函數(shù),還有釋放內(nèi)存操作。 
} 

        注意:析構(gòu)函數(shù)可以被顯式調(diào)用,但是當(dāng)對(duì)象的生命周期結(jié)束后,系統(tǒng)還會(huì)再調(diào)用一次析構(gòu)函數(shù),這樣就造成了調(diào)用2次析構(gòu)函數(shù),如果在析構(gòu)函數(shù)中含有delete操作,就會(huì)出現(xiàn)問題。所以析構(gòu)函數(shù)的顯式調(diào)用比較少。STL源碼中有用到析構(gòu)函數(shù)的顯式調(diào)用,這屬于一些特殊用法。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • c++11中std::move函數(shù)的使用

    c++11中std::move函數(shù)的使用

    本文主要介紹了c++11中std::move函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言技巧提升之回調(diào)函數(shù)的掌握

    C語言技巧提升之回調(diào)函數(shù)的掌握

    這篇文章主要為大家詳細(xì)介紹一下C語言中回調(diào)函數(shù)的用法教程,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語言有一定幫助,需要的可以參考一下
    2022-12-12
  • C語言詳解如何實(shí)現(xiàn)順序棧

    C語言詳解如何實(shí)現(xiàn)順序棧

    順序棧,就是用一組地址連續(xù)的存儲(chǔ)單元來存放棧元素,然后用一個(gè)棧結(jié)構(gòu)去維護(hù)一個(gè)棧。在C中,可用動(dòng)態(tài)開辟的數(shù)組去表示,維護(hù)的棧結(jié)構(gòu)需要有一個(gè)棧底和一個(gè)棧頂指針
    2022-04-04
  • C++中的const限定符的使用和作用

    C++中的const限定符的使用和作用

    C++ 中的 const 限定符用于聲明不可變量,即在變量聲明時(shí)指定該變量的值不可修改。它的使用可以幫助程序員避免一些常見的編程錯(cuò)誤,如誤修改不應(yīng)該被修改的變量的值等
    2023-05-05
  • C語言動(dòng)態(tài)數(shù)組詳解

    C語言動(dòng)態(tài)數(shù)組詳解

    本文給大家分享的是一則使用C語言實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的代碼,完美解決內(nèi)存溢出以及內(nèi)存回收問題,有需要的小伙伴可以參考下
    2021-09-09
  • c++虛函數(shù)與虛函數(shù)表原理

    c++虛函數(shù)與虛函數(shù)表原理

    這篇文章主要介紹了c++虛函數(shù)與虛函數(shù)表原理,用virtual?修飾的成員函數(shù)叫虛函數(shù),下面圍繞c++虛函數(shù)與虛函數(shù)得相關(guān)資料展開內(nèi)容,需要的朋友可以參考一下
    2021-12-12
  • C/C++深入講解內(nèi)存管理

    C/C++深入講解內(nèi)存管理

    本章主要介紹C語言與C++的內(nèi)存管理,以C++的內(nèi)存分布作為引入,介紹C++不同于C語言的內(nèi)存管理方式(new?delete對(duì)比?malloc?free),感興趣的朋友來看看吧
    2022-05-05
  • C語言修煉之路靈根孕育源流出?初識(shí)C言大道生上篇

    C語言修煉之路靈根孕育源流出?初識(shí)C言大道生上篇

    C語言是一門面向過程、抽象化的通用程序設(shè)計(jì)語言,廣泛應(yīng)用于底層開發(fā)。C語言能以簡易的方式編譯、處理低級(jí)存儲(chǔ)器。C語言是僅產(chǎn)生少量的機(jī)器語言以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的高效率程序設(shè)計(jì)語言
    2022-03-03
  • 通過C++程序示例理解設(shè)計(jì)模式中的外觀模式

    通過C++程序示例理解設(shè)計(jì)模式中的外觀模式

    這篇文章主要介紹了通過設(shè)計(jì)模式中的外觀模式及相關(guān)的C++程序示例,外觀模式在高層提供了一個(gè)統(tǒng)一的接口實(shí)現(xiàn)一定程度上的解耦,需要的朋友可以參考下
    2016-03-03
  • 詳解C語言進(jìn)程同步機(jī)制

    詳解C語言進(jìn)程同步機(jī)制

    這篇文章主要介紹了詳解C語言進(jìn)程同步機(jī)制的的相關(guān)資料,文中代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06

最新評(píng)論