C 中的構造 析構

2021-10-04 02:46:51 字數 2092 閱讀 8464

知識點【建構函式的呼叫規則】(重要)

系統會對任何乙個類提供3個函式成員函式:

預設建構函式(空) 預設析構函式(空) 預設拷貝建構函式(淺拷貝)

1、如果使用者提供了有參構造 將遮蔽 系統的預設建構函式。

data ob1;//err

2、如果使用者提供了有參構造 不會遮蔽 系統的預設拷貝建構函式。

data ob1(10);

data ob2 = ob1;

ob2.num == 10

3、如果使用者提供了拷貝建構函式 將遮蔽 系統的預設建構函式、預設拷貝建構函式。

data ob1;//err

總結:對於建構函式:使用者一般要實現:無參構造、有參構造、拷貝構造、析構。

知識點2【深拷貝與淺拷貝】

淺拷貝:

class

person

person

(char

*name,

int num)

cout<<

" 已經申請好空間"

<

strcpy

(m_name,name)

; m_num = num;

cout<<

"有參構造"

<

}person

(const person &ob)

//ob==>lucy

~person()

cout<<

"析構函式"

<

}void

showperson

(void)}

;void

test01()

如果類中的成員 指向了堆區空間 一定要記得在析構函式中 釋放該空間

如果使用者 不實現 拷貝構造 系統就會提供預設拷貝構造

而預設拷貝構造 只是單純的賦值 容易造成淺拷貝問題

使用者記得 要實現:無參構造(初始化資料)、有參構造(賦引數)、拷貝構造(深拷貝) 、析構函式(釋放空間)

知識點3【初始化列表】

注意:初始化成員列表(引數列表)只能在建構函式使用

class

data

~data()

void

showdata

(void)}

;void

test01()

執行結果:

//初始化列表:物件名+() 顯示呼叫 呼叫物件成員的建構函式

data

(int a,

int b,

int c)

:oba

(a),

obb(b)

,data

(c)~

data()

};void

test01()

執行結果;

注意:1、按各物件成員在類定義中的順序(和引數列表的順序無關)依次呼叫它們的建構函式

2、先呼叫物件成員的建構函式,再呼叫本身的建構函式。 析構函式和構造函式呼叫順序相反,先構造,後析構

知識點5【explicit關鍵字】

c++提供了關鍵字explicit,禁止通過建構函式進行的隱式轉換。宣告為explicit的建構函式不能在隱式轉換中使用

class

data

~data()

void

shownum

(void)}

;int

main

(int argc,

char

*ar**)

執行結果

C 中的建構函式(構造器)與析構函式(析構器)

該文章的程式 是按繼承中的基類子類來寫的。跟基本的建構函式與析構函式一樣。只是加了一丟丟東西。現在我們直奔主題!c 建構函式和析構函式主要負責構建物件和銷毀物件,在構建物件的時候系統自己呼叫類中的建構函式。在物件作用域結束後,呼叫析構函式銷毀物件。一般來說,建構函式用來完成事先的初始化和準備工作 申...

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

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

C 中構造和析構介紹

c 中構造和析構介紹 1.c 中的類可以定義與類名相同的特殊的成員函式,2.與類名相同的成員函式叫做建構函式 3.建構函式在定義時可以有引數,但是沒有任何返回型別的宣告 4.類中的成員函式可以和普通函式一樣進行過載,遵守相同的過載規則。兩個特殊的建構函式 分別是無參建構函式和拷貝建構函式 1.當類中...