(二十一)構(gòu)造與析構(gòu)

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

  • 函數(shù)名與類名相同,沒有返回值。相當(dāng)于將對(duì)象初始化
class Circle
{
public:
    Circle()
    {
        x = y = 0;
        radius = 1;
    }
public:
    int x,y;
    int radius;
};

構(gòu)造函數(shù)可以重載,只要參數(shù)列表不同就行

class Circle
{
public:
    Circle()
    {
        x = y = 0;
        radius = 1;
    }
    Circle(int x,int y,int r)
    {
        this->x = x;
        this->y = y;
        this->radius = r;
    }
public:
    int x,y;
    int radius;
};

int main()
{
    Circle a;
    Circle b(1,1,4);
    return 0;
}
int a(10);//就是int a = 10;

構(gòu)造函數(shù)保證了對(duì)象一被創(chuàng)建就是被初始化的,可以避免忘記初始化產(chǎn)生錯(cuò)誤

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

析構(gòu)是構(gòu)造的反過程,表示對(duì)象的銷毀過程。析構(gòu)函數(shù)只能有一個(gè),不允許重載

class Object
{
public:
    ~Object()
    {
        printf("...銷毀...\n")
    }
}

自動(dòng)生成的構(gòu)造/析構(gòu)函數(shù)

如果程序沒有構(gòu)造函數(shù)/析構(gòu)函數(shù),那么編譯器會(huì)隱含地添加一個(gè),相當(dāng)于寫了一個(gè)空的構(gòu)造/析構(gòu)函數(shù)

class Object
{
public:
    Object()
    {
    }
    ~Object()
    {
    }
}

構(gòu)造函數(shù)的初始化列表

class Circle
{
public:
    Circle():x(0),y(0),radius(1)
    { 
        //x = y = 0; radius = 1; 
    }
private:
    int x,y;
    int radius;
};

必須使用初始化列表的情況:當(dāng)成員為引用類型

#include<stdio.h>
class Object
{
public:
    Object(int& a):ref(a)
    {
    }
private:
    int& ref;
}
int main()
{
    int value = 1;
    Object obj(value);
    return 0;
}

構(gòu)造和析構(gòu)的順序

#include<stdio.h>

class ChildA
{
public:
    ChildA()
    {
        printf("創(chuàng)建A...\n");
    }
    ~ChildA()
    {
        printf("銷毀A...\n");
    }
};

class ChildB
{
public:
    ChildB()
    {
        printf("創(chuàng)建B...\n");
    }
    ~ChildB()
    {
        printf("銷毀B...\n");
    }
};

class Object
{
public:
    Object()
    {
        printf("創(chuàng)建Object...\n");
    }
    ~Object()
    {
        printf("銷毀Object...\n");
    }
private:
    ChildA a;
    ChildB b;
};

int main()
{
    Object obj;
    return 0;
}

上述運(yùn)行結(jié)果為

//只有A和B創(chuàng)建之后,Object才能創(chuàng)建
創(chuàng)建A...
創(chuàng)建B...
創(chuàng)建Object...
銷毀Object...
銷毀B...
銷毀A...
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容