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

C++分析構(gòu)造函數(shù)與析造函數(shù)的特點梳理

 更新時間:2022年05月09日 11:38:17   作者:Gy648  
本文對類的構(gòu)造函數(shù)和析構(gòu)函數(shù)進行總結(jié),主要包括了構(gòu)造函數(shù)的初始化、重載、使用參數(shù)和默認參數(shù),拷貝構(gòu)造函數(shù)和析構(gòu)函數(shù),希望能幫助讀者在程序開發(fā)中更好的理解類,屬于C/C++基礎(chǔ)

構(gòu)造函數(shù)的調(diào)用

默認情況下編譯器至少給一個類添加3個函數(shù)

1.默認構(gòu)造函數(shù)(無參,函數(shù)體實現(xiàn))--完成對象的初始化

2.默認析構(gòu)函數(shù)(無參,函數(shù)體為空)--完成對象的清理

3.默認拷貝構(gòu)造函數(shù),屬性進行值拷貝

規(guī)則:

如果用戶定義了有參構(gòu)造,c++不會提供無參構(gòu)造,但是提供默認拷貝構(gòu)造

如果用戶定義了拷貝構(gòu)造函數(shù),c++不會在提供其他函數(shù)

類名(){}

構(gòu)造函數(shù)的語法

1,沒有返回值,也不寫void;

2,函數(shù)名稱與類名相同;

3,構(gòu)造函數(shù)可以有參數(shù),因此可以發(fā)生重載;

4,程序在調(diào)用對象時會自動調(diào)用構(gòu)造函數(shù),無需手動調(diào)用且只調(diào)用一次

析造函數(shù)~類名()

1.析造函數(shù),沒有返回值也不寫void

2.函數(shù)名稱與類名相同在前面加上~

3.構(gòu)造函數(shù)不可以有參數(shù),因此不可以發(fā)生重載

4.程序在對象銷毀會自動調(diào)用析構(gòu),與構(gòu)造函數(shù)的調(diào)用規(guī)則相同

構(gòu)造函數(shù)的分類及調(diào)用

1.按照參數(shù)分類為 無參構(gòu)造和 有參構(gòu)造

class person
{
public:
    person()
    {
    cout<<"無參構(gòu)造的調(diào)用"<<endl;
    }
    person(int a)
    {
    cout<<"有參構(gòu)造的調(diào)用"<<endl;
    }
};

2.按照類型分為 普通構(gòu)造和 拷貝構(gòu)造

person(const person& p)
{
}

拷貝構(gòu)造的語法

調(diào)用構(gòu)造函數(shù)的方法

void test()
{
    //1.括號法
    person p1;//默認無參構(gòu)造調(diào)用
    person p2(10);//默認有參構(gòu)造的調(diào)用
     preson p3(p2);//拷貝構(gòu)造的調(diào)用;
    //若是這樣寫 下面這行代碼會被認為是編譯器的聲明
     person p1();  // void func();
   // 無法完成函數(shù)的調(diào)用
    2.顯示法
    person p1;
    person p2=person(10);
    person p3=person(p2);
    // 匿名對象
   person(10);//特點:當前行執(zhí)行結(jié)束后,系統(tǒng)會立即回收匿名對象
    // 3.隱式轉(zhuǎn)換法
    person p4=10;// 相當于 寫了 person p4 =person(10);
    person p5=p4;
}

拷貝構(gòu)造的調(diào)用時機

1.使用一個已經(jīng)創(chuàng)建完畢的對象來初始化一個新對象

2.值傳遞的形式給函數(shù)參數(shù)傳值

class p
{
};
void dowork(person p )//形參p
{
}
void test02()
{
    person p;
    dowork(p);// 相當于發(fā)生了隱式類型轉(zhuǎn)換 傳入值拷貝 person p=p;
}

3.值方式返回局部對象

深拷貝與淺拷貝

如果利用編譯器提供的拷貝構(gòu)造函數(shù)

會做淺(值)拷貝的操作(會使得new的對象指針指向同一個地址),會帶來對堆區(qū)內(nèi)存持續(xù)釋放的問題

如果堆區(qū)開辟了內(nèi)存,可以在析構(gòu)函數(shù)中釋放;

對于拷貝構(gòu)造函數(shù),可以自己實現(xiàn)一個拷貝構(gòu)造函數(shù)(深拷貝)(new一個新的對象實現(xiàn)拷貝構(gòu)造)

總結(jié): 如果屬性有在堆區(qū)開辟,一定要自己提供拷貝構(gòu)造函數(shù),防止淺拷貝帶來的問題

初始化列表

c++提供了初始化列表語法用來初始化屬性

class person
{
    person(int a,int b,int c):m_a(a),m_b(b),m_c(c);
    {
    }
    int m_a;
    int m_b;
    int m_c;
};

到此這篇關(guān)于C++分析構(gòu)造函數(shù)與析造函數(shù)的特點梳理的文章就介紹到這了,更多相關(guān)C++構(gòu)造函數(shù)與析造函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言中隊列的結(jié)構(gòu)和函數(shù)接口的使用示例

    C語言中隊列的結(jié)構(gòu)和函數(shù)接口的使用示例

    隊列只允許一端進行插入數(shù)據(jù)操作,在另一端進行刪除數(shù)據(jù)操作的特殊線性表,隊列具有先進先出FIFO的性質(zhì);隊列可用數(shù)組和鏈表 的方法實現(xiàn),使用鏈表的結(jié)構(gòu)實現(xiàn)更優(yōu)一些,因為如果使用數(shù)組節(jié),出隊列時刪去首元素需要將整個數(shù)組前移,效率比較低
    2023-02-02
  • C++實現(xiàn)stack與queue數(shù)據(jù)結(jié)構(gòu)的模擬

    C++實現(xiàn)stack與queue數(shù)據(jù)結(jié)構(gòu)的模擬

    stack是一種容器適配器,專門用在具有后進先出操作的上下文環(huán)境中,其刪除只能從容器的一端進行 元素的插入與提取操作;隊列是一種容器適配器,專門用于在FIFO上下文(先進先出)中操作,其中從容器一端插入元素,另一端提取元素
    2023-04-04
  • gazebo里通過節(jié)點發(fā)布topic讓關(guān)節(jié)轉(zhuǎn)動實現(xiàn)詳解

    gazebo里通過節(jié)點發(fā)布topic讓關(guān)節(jié)轉(zhuǎn)動實現(xiàn)詳解

    這篇文章主要介紹了gazebo里通過節(jié)點發(fā)布topic讓關(guān)節(jié)轉(zhuǎn)動實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • C++ deque與vector對比的優(yōu)缺點

    C++ deque與vector對比的優(yōu)缺點

    這篇文章主要介紹了C++中deque與vector相比的優(yōu)勢與劣勢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-01-01
  • C語言深入講解函數(shù)的使用

    C語言深入講解函數(shù)的使用

    各位小伙伴們,今天YU同學給大家?guī)淼氖桥c函數(shù)相關(guān)的知識,本篇將會帶著大家初步認識和調(diào)用函數(shù)來解決一些簡單的問題
    2022-04-04
  • C++中實現(xiàn)OpenCV圖像分割與分水嶺算法

    C++中實現(xiàn)OpenCV圖像分割與分水嶺算法

    分水嶺算法是一種常用的圖像區(qū)域分割法,本文主要介紹了OpenCV圖像分割與分水嶺算法,使用C++實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2021-06-06
  • 分享常用的3個C++小技巧

    分享常用的3個C++小技巧

    這篇文章主要分享了常用的3個C++小技巧,
    2021-12-12
  • C語言實現(xiàn)自動給QQ好友發(fā)窗口抖動

    C語言實現(xiàn)自動給QQ好友發(fā)窗口抖動

    這篇文章主要介紹了C語言實現(xiàn)自動給QQ好友發(fā)窗口抖動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C++實現(xiàn)AVL樹的基本操作指南

    C++實現(xiàn)AVL樹的基本操作指南

    AVL樹是高度平衡的而二叉樹,它的特點是AVL樹中任何節(jié)點的兩個子樹的高度最大差別為1,下面這篇文章主要給大家介紹了關(guān)于C++實現(xiàn)AVL樹的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • C++刪除鏈表中間節(jié)點的方法

    C++刪除鏈表中間節(jié)點的方法

    這篇文章主要介紹了C++刪除鏈表中間節(jié)點的方法,結(jié)合實例形式分析了鏈表刪除中間節(jié)點的具體思路與實現(xiàn)技巧,需要的朋友可以參考下
    2017-05-05

最新評論