(1)無參建構函式
當類中沒有定義建構函式時,編譯器預設提供乙個無參建構函式,並且其函式體為空。
(2)拷貝建構函式
當類中沒有定義拷貝建構函式時,編譯器預設提供乙個拷貝建構函式,簡單的進行成員變數的值複製。
1 #include 2特殊的建構函式3class
test413
intgetj()
1417
18 test(const test&t)
1923
24/*
25test()
2628
*/29
};30
31int
main()
32
2.1 拷貝建構函式的意義
(1)相容 c 語言的初始化方式 int i = 1; int j = i;
(2)初始化行為能夠符合預期的邏輯
(3)深拷貝和淺拷貝
① 淺拷貝:拷貝後物件的物理狀態相同【編譯器提供的拷貝建構函式只提供淺拷貝】
② 深拷貝:拷貝後物件的邏輯狀態相同
1 #include 2物件的初始化3class
test412
13int getj()
1415
int* getp()
1617
/*18
//拷貝建構函式
19test(const test& t)
2027
*/28
2930
//帶參建構函式
31 test(int
v)32
3940 ~test()
4142
};43
44int
main()
45
2.2 什麼時候需要進行深拷貝?
(1)物件中有成員指向了系統中的資源
(2)問題分析
★★★一般性原則:自定義拷貝建構函式的時候,必須思考這個拷貝函式是否需要實現深拷貝? 如果不需要,為什麼不使用編譯器提供的拷貝建構函式?
【程式設計實驗】陣列類的改進
1intarray.h#ifndef _intarray_h_
2#define _intarray_h_34
class
intarray5;
1920
#endif
1 #include "intarray.cppintarray.h"2
3 intarray::intarray(int
len)411
12 m_length =len;13}
1415 intarray::intarray(const intarray&obj)
1625}26
27 intarray::~intarray()
2833}34
35int
intarray::length()
3639
40bool intarray::get(int index, int&value)
4148
49return
bret;50}
5152
bool intarray::set(int index, int
value)
5361
62return
bret;
63 }
1 #include 2 #include "main.cppintarray.h"3
4int
main()512
13for(int i=0; i)
1421}22
23 intarray b = a; //
呼叫拷貝建構函式
2425
for(int i=0; i)
2633}34
return0;
35 }
(1)c++ 編譯器會預設提供建構函式
(2)無參建構函式用於定義物件的預設初始狀態
(3)拷貝建構函式在建立物件時拷貝物件的狀態
(4)物件的拷貝有淺拷貝和深拷貝兩種方式。淺拷貝使得物件的物理狀態相同;深拷貝使得物件的邏輯狀態相同。
第19課 物件的構造下
本文內容取自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 兩個特殊的建構函式 無參建構函式 沒有引數的建構函式 拷貝建構函式 引數為const class name 的建構函式 無參建構函式 拷貝建構函式 程式設計實驗 特殊的建構函式 include class test int test...
C 學習筆記 第19課 物件的構造(下)
拷貝建構函式 注意 編譯器提供的拷貝建構函式只進行淺拷貝成員指向的動態記憶體空間 成員開啟了外存中的檔案 成員使用了系統中的網路埠 問題引出 include class ctest void setj int ival ctest ctest const ctest t intgeti intget...
C 19 物件的構造(下)
兩個特殊的建構函式 無參建構函式 當類中沒有定義建構函式時,編譯器預設提供乙個無參建構函式,並且其函式體為空。拷貝建構函式 當類中沒有定義拷貝建構函式時,編譯器預設提供乙個建構函式,簡單的進行成員變數的值複製。面試題 class t 這裡面的其實裡面有隱藏的建構函式和拷貝建構函式 有乙個概念要理清 ...