C 建構函式和深拷貝與淺拷貝

2021-10-03 03:08:01 字數 1754 閱讀 1477

建構函式: 

· 物件被建立時 自動呼叫

· 函式名與類名相同

· 可以有形參,可以沒有

· 可以過載

· 可以有預設引數值

· 可以是內聯函式

· 不能有return語句

//建構函式的實現

clock :: clock(int newh,int newm,int news):hour(newh),minite(newm),second(news)

這樣的初始化方式 ,效率高於表示式賦值

已有建構函式,還想讓系統生成預設建構函式

語法: 類名() = default;

如果沒有構造方法來初始化,便會使用內類初始值;
clock();

clock(int newh = 1,int newm = 2);

這兩種都是預設建構函式(不給引數都能呼叫),不能同時出現

利於保持**一致性。

形參列表不同,初始化列表不同,而其他的都是一樣的。

clock :: clock(int newh,int newm,int news):hour(newh),minite(newm),second(news)

clock :: clock():hour(0),minite(0),second(0){}

以上兩個函式,初始化的過程是一樣的

以上**可以 使用 委託建構函式 簡寫為:

clock :: clock(int newh,int newm,int news):hour(newh),minite(newm),second(news)

clock : clock(0,0,0){}

編譯器有預設的複製建構函式。(將資料成員一一對應)

用已經存在的物件,初始化新物件;

class 類名

類名::類(const 類名 &物件名)

呼叫複製建構函式的情況:(3種)

· 定義乙個物件時,用另乙個物件初始化

· 呼叫函式時,物件做引數

· 函式返回值 是物件時

c++11 中:指示編譯器 不生成預設複製建構函式:

類名(const 類名& p) = delete;

c++98 中:

複製建構函式申明為private,並不提供函式的實現。

物件之間元素的一一對應複製(普通複製建構函式)。
類的資料成員中有指標,指標指向的空間是在構造的時候通過動態記憶體分配方式獲得的得空間,要對物件做複製構造,還能再用淺層複製嗎?

含義: 當被複製的物件資料成員是指標型別時,不是複製該指標本身,而是將指 針所指的物件複製

將值一一複製。

深層複製;

也就是重新構造乙個指標,動態分配乙個新的空間,然後將原指標複製過來,並將原指標中的內容一一遍歷到新的指標中

C 拷貝建構函式 深拷貝與淺拷貝

深拷貝函式主要是解決拷貝函式不能直接拷貝指標所指記憶體的資料的問題 其次,介紹一下什麼是拷貝建構函式以及拷貝建構函式將在何時被呼叫?拷貝建構函式是一種特殊的建構函式,其形參是本類物件的引用,其作用是使用乙個已經存在的物件來初始化 乙個新的同類的物件。何時被呼叫?當用類的物件去初始化另外乙個物件的時候...

拷貝建構函式與深拷貝和淺拷貝

拷貝建構函式是一種特殊的建構函式,函式的名稱必須和類名稱一致,它必須的乙個引數是本型別的乙個引用變數。作用就是用來複製物件,在使用這個物件的例項來初始化這個物件的乙個新的例項。類中可以存在多個拷貝建構函式。includeusing namespace std class cexample cexam...

C 拷貝建構函式 淺拷貝和深拷貝

建構函式可以沒有,也可以有多個。複製建構函式只有乙個,不定義編譯器自動生成,使用者寫就使用自定義的複製建構函式 物件之間的複製語句不會呼叫複製建構函式。利用編譯器提供的拷貝建構函式,會做淺拷貝 淺拷貝帶來的問題就死堆區記憶體的重複釋放 案例1 class student student 程式正常輸出...