知識點【建構函式的呼叫規則】(重要)
系統會對任何乙個類提供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.當類中...