C 物件的構造和析構

2021-08-08 12:54:40 字數 1946 閱讀 6605

一、建構函式

1、宣告:

1)c++中的類可以定義與類名相同的特殊成員函式,這種與類名相同的成員函式叫做建構函式;

語法:classname()

2)建構函式在定義時可以有引數;

3)沒有任何返回型別的宣告。 

2、呼叫

自動呼叫:一般情況下c++編譯器會自動呼叫建構函式

手動呼叫:在一些情況下則需要手工呼叫建構函式

二、析構函式

1、宣告:

1)c++中的類可以定義乙個特殊的成員函式清理物件,這個特殊的成員函式叫做析構函式;

語法:~classname()

2)析構函式沒有引數也沒有任何返回型別的宣告;

3)析構函式在物件銷毀時自動被呼叫 。

2、呼叫

自動呼叫:一般情況下c++編譯器會自動呼叫建構函式

手動呼叫:在一些情況下則需要手工呼叫建構函式

三、**分析

#include class test

~test() // 析構函式,析構函式與類名相同,前面有個~ 不能有返回值和引數

}; int main()

std::cout << "3" << std::endl;

return 0;

}

四、用途展示

#include #include using namespace std;

class test

test(int a)

test(int a, int b) // 有參建構函式

// 賦值建構函式(拷貝建構函式)

test(const test &obj)

public:

void print()

private:

int m_a;

int m_b;};

int main()

// 有參構造函式呼叫

return 0;

}

3)賦值(拷貝)建構函式;

拷貝建構函式的呼叫時機:

1、test t2 = t1;   // 用物件 t1 去初始化t2

2、test t2(t0);    // 用物件 t0 去初始化t2

3、printobj(t0);   // 做函式引數的時候

4、t1 = test();       // 函式返回值返回物件

#include #include using namespace std;

class test

test(int a)

test(int a, int b) // 有參建構函式

test (char *name)

// 賦值建構函式(拷貝建構函式)

test(const test &obj)

~test()

public:

void print()

private:

char m_name[20];

int m_a;

int m_b;};

void printobj(test obj)

test test()

// 賦值建構函式 用乙個物件去初始化另乙個物件

int main()

#endif

return 0;

}

4)預設建構函式:

二個特殊的建構函式

1)預設無參建構函式

當類中沒有定義建構函式時,編譯器預設提供乙個無參建構函式,並且其函式體為空

2)預設拷貝建構函式

當類中沒有定義拷貝建構函式時,編譯器預設提供乙個預設拷貝建構函式,簡單的進行成員變數的值複製

C 多個物件構造 析構 構造和析構的順序

include 多個物件構造和析構 1 當類中有成員變數是其它類的物件時,首先呼叫成員變數的建構函式,呼叫順序與宣告順序相同 之後呼叫自身類的建構函式 2 析構函式的呼叫順序與對應的構造函式呼叫順序相反 2 類成員中若有const修飾,必須在物件初始化的時候,給const int n 賦值 當類成員...

C 全域性物件構造和析構

注 此為小白引導教程 引入 c 中的全域性物件什麼時候執行建構函式?什麼時候執行析構函式?與區域性物件又有什麼區別?正文 思路是這樣的,我們先寫乙個類,乙個有點簡單 又不簡單 的類 include include using std string using std cout using std e...

C 構造和析構

include using namespace std class b b b b b b int i data i b operator b b private int data b play b b int main output constructed by parameter 5 destr...