第19課 物件的構造(下)

2022-02-21 12:23:21 字數 2597 閱讀 4464

(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)問題分析

★★★一般性原則:自定義拷貝建構函式的時候,必須思考這個拷貝函式是否需要實現深拷貝?  如果不需要,為什麼不使用編譯器提供的拷貝建構函式?

【程式設計實驗】陣列類的改進

1

#ifndef _intarray_h_

2#define _intarray_h_34

class

intarray5;

1920

#endif

intarray.h

1 #include "

intarray.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 }

intarray.cpp

1 #include 2 #include "

intarray.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 }

main.cpp

(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 這裡面的其實裡面有隱藏的建構函式和拷貝建構函式 有乙個概念要理清 ...