C 篇之建構函式 析構函式和拷貝建構函式

2021-08-23 12:36:35 字數 1755 閱讀 5124

建構函式:

建構函式負責建立物件和初始化物件,在用預設的建構函式建立物件時,如果建立的是全域性物件或

靜態物件,則物件的值全為0,否則物件的值是隨機的,和c語言中定義的變數一樣(類也是一

個型別)。建立物件的同時會自動呼叫建構函式。

建構函式的規則:

建構函式和類的名字一樣並且沒有返回值,可以有引數也可以沒有引數,也可以有預設值。主要是

為資料賦初值。建構函式可以過載。

建構函式的初始化列表:

建構函式的初始化列表中的資料的初始化順序和宣告的相同。

const資料成員必須使用初始化列表進行初始化。

這裡寫**片

class student

;student::student(int m_id ,int m_score ):id(m_id),score(m_score)

注意:建構函式的初始化列表要和建構函式的實體寫在一起,不能寫到宣告裡面去。

預設引數在實體或宣告中都行

public:

student(int m_id ,int m_score );//:id(m_id),score(m_score);

~student();

student(const student& pt);

student::student(int m_id = 0,int m_score = 0):id(m_id),score(m_score)

{...

}注意:預設引數要麼在宣告裡(第一種)要麼在函式的實體裡的形參裡(第二種),兩者

是或的關係。而初始化列表必須和函式的實體在一起,要麼不用初始化列表。

析構函式:

乙個類可能在建構函式裡分配資源也就是記憶體(如果有資料的話),這些資源需要在物件不復存在

之前被釋放,也就是這個物件的生命週期結束的時候,由系統自動呼叫,,析構函式沒有返回值類

型,沒有引數,也沒有過載。如果沒有自定義析構函式,則編譯器提供乙個預設的析構函式。

拷貝建構函式:

student(const student&)//拷貝建構函式的形式

拷貝函式具有單個形參,並且這個形參是對該型別的引用。

1.當定義乙個新物件並用同乙個型別的物件對它初始化時,將顯示呼叫拷貝建構函式。比如:

student s1("joe");

student s2 = s1;//這時呼叫拷貝建構函式

student s3("tom");

s2 = s3;//這時會呼叫賦值運算子

2.拷貝乙個臨時物件時,比如:

void foo(student stu);

foo(s1);//這裡會呼叫拷貝建構函式,傳遞s1的乙個副本,傳遞副本的時候會呼叫拷貝

建構函式

3.student bar();

student tom = bar();這時會呼叫拷貝建構函式

什麼時候需要拷貝建構函式呢?(有的需要,有的不需要)

1.當類資料成員有指標時需要定義拷貝建構函式和定義賦值運算子

2.當類資料成員管理資源,比如開啟乙個檔案,申請一塊記憶體區域...

c++為什麼要定義拷貝建構函式?

這裡涉及到深拷貝與淺拷貝的問題(淺拷貝就是兩個指標指向同一塊資源,深拷貝就是兩個

指標指向兩塊資源,這兩塊資源的內容一樣),預設的拷貝建構函式是淺拷貝,如果涉及到

指標,同一塊資源會被析構兩次,會出現問題。

C 建構函式 拷貝構造 析構函式

建構函式 constructor 在例項物件時,系統自動呼叫,用來初始化物件的資料成員 建構函式宣告語法 類名 引數列表 建構函式注意點 include include using namespace std class computer 上面的建構函式也可以寫成引數列表初始化的形式 compute...

C 建構函式 析構函式 拷貝建構函式

建構函式 析構函式 拷貝建構函式 如果類成員變數有初始值,用這些初始值初始化成員變數 如果類成員變數沒有初始值,則預設初始化該成員變數 class student int main 使用注意事項 語法 這個預設建構函式之所以對student有效,是因為我們為內建型別的資料成員提供了初始值 如果你的編...

建構函式析構函式和拷貝建構函式

建構函式 建立類物件,並初始化其值。1.傳參 2.按照類成員宣告順序依次構造其成員 3.執行建構函式函式體 析構函式 用來完成物件被刪除前的一些清理工作 釋放類物件 1.執行析構函式函式 2.按照類中成員變數宣告順序的逆序依次析構其成員 初始化列表 初始化物件成員 呼叫成員物件的帶參構造 形式 在建...