C 基礎10 拷貝建構函式

2021-10-11 02:08:35 字數 3004 閱讀 7601

1.1 拷貝建構函式的定義

如果乙個類的建構函式的第乙個引數為所屬類型別的引用。如果還有其他額外引數,且這些額外的引數都有預設值,則該建構函式就叫拷貝建構函式。

函式的預設引數必須放在函式宣告中,除非該函式沒有宣告。

1.2 拷貝建構函式的作用

拷貝建構函式會在一定的時機被系統自動呼叫。

#ifndef day02_time_h

#define day02_time_h

//類的宣告

class

time

;#endif

//day02_time_h

#include

using

namespace std;

#include

"time.h"

time::

time()

//建議拷貝建構函式的第乙個引數總是帶上const

time::

time

(const time &tmptime,

int a)

intmain()

;//呼叫了拷貝建構函式time::time(time &tmptime, int a)

time time5 =

;//呼叫了拷貝建構函式time::time(time &tmptime, int a)

}

1.3 拷貝建構函式的建議

拷貝建構函式的第乙個引數總是用const修飾。

拷貝建構函式前不要用explicit修飾。

由於進行拷貝構造時,一般系統會進行隱式型別轉換,而explicit會關掉隱式型別轉換

1.4 類物件的拷貝

(1)預設情況下,類物件的拷貝是每個成員變數逐個進行拷貝。

(2)成員變數的逐個拷貝功能會因為我們自己定義的拷貝建構函式失去作用。

#ifndef day02_time_h

#define day02_time_h

//類的宣告

class

time

;#endif

//day02_time_h

#include

using

namespace std;

#include

"time.h"

time::

time()

time::

time

(int hour,

int minute)

:m_hour

(hour)

,m_minute

(minute)

//建議拷貝建構函式的第乙個引數總是帶上const

time::

time

(const time &tmptime,

int a)

intmain()

; time time5 =

;}

(3)如果我們沒有自己定義拷貝建構函式,系統會為我們自動定義乙個「合成拷貝建構函式」,該合成拷貝建構函式會將每個成員變數逐個進行拷貝,此時,如果成員變數為類型別,則系統合成的拷貝建構函式會呼叫該類的拷貝建構函式來拷貝。

#ifndef day02_time_h

#define day02_time_h

//類的宣告

classa;

class

time

;#endif

//day02_time_h

#include

using

namespace std;

#include

"time.h"

a::a()

a::a

(const a& tmpa)

time::

time()

intmain()

(4)由於自己定義的拷貝建構函式會取代系統合成的拷貝建構函式,此時需要在自己的拷貝建構函式中給類成員進行賦值。以免出現類成員還沒賦值就使用的情況。

#ifndef day02_time_h

#define day02_time_h

class

time

;#endif

//day02_time_h

#include

using

namespace std;

#include

"time.h"

time::

time()

//在拷貝建構函式中給成員變數初始化

time::

time

(time &tmptime)

:m_hour(12

),m_minute(18

)int

main()

1.5系統呼叫拷貝建構函式的其它形式

(1)將類物件作為實參傳遞給乙個非引用型別的形參。

#ifndef day02_time_h

#define day02_time_h

class

time

;#endif

//day02_time_h

#include

using

namespace std;

#include

"time.h"

time::

time()

//在拷貝建構函式中給成員變數初始化

time::

time

(time &tmptime)

void

func1

(time tmp)

void

func2

(time& tmp)

intmain()

(2)從乙個函式中返回乙個物件的時候也會呼叫拷貝建構函式。

C 基礎(五)拷貝建構函式

拷貝建構函式 深拷貝與淺拷貝 include includeusing namespace std class teacher teacher teacher t teacher void print static char m country private int m age static ch...

C 建構函式 拷貝建構函式

建構函式 class base private int m var 建構函式無返回值型別,函式名和型別相同。拷貝建構函式傳遞引數為引用。1 class base2 7 拷貝建構函式 8 base base ref m var ref m var 9 11 private 12 intm var 13...

C 基礎(一)建構函式 析構函式 拷貝建構函式

在c 中你寫乙個空類,什麼都不做,編譯器會給你生成乙個建構函式,乙個拷貝建構函式,乙個拷貝賦值函式 運算子過載 乙個析構函式,而且是當他們被呼叫的時候才生成。這說明這四個函式的重要 這裡主要說他們其中的三個 c 中的建構函式用來產生物件,他告訴編譯器如何初始化乙個物件,以及其它一些前期工作 相對應的...