C 學習筆記 C 拷貝建構函式(5)

2021-10-25 22:24:33 字數 1743 閱讀 8776

拷貝建構函式是一種特殊的建構函式,它在建立物件時,是使用同一類中之前建立的物件來初始化新建立的物件。拷貝建構函式通常用於:

~通過使用另乙個同型別的物件來初始化新建立的物件。

~複製物件把它作為引數傳遞給函式。

~複製物件,並從函式返回這個物件。

如果類帶有指標變數,並有動態記憶體分配,則它必須有乙個拷貝建構函式。

拷貝建構函式的最常見形式如下:

classname (const classname &obj)

在這裡,obj 是乙個物件引用,該物件是用於初始化另乙個物件的。

#include 

using namespace std;

class line;

// 成員函式定義,包括建構函式

line::line(int len)

line::line(const line &obj)

line::~line(void)

int line::getlength( void )

void display(line obj)

// 程式的主函式

int main(

)當上面的**被編譯和執行時,它會產生下列結果:

呼叫建構函式

呼叫拷貝建構函式並為指標 ptr 分配記憶體

line 大小 : 10

釋放記憶體

釋放記憶體

下面的例項對上面的例項稍作修改,通過使用已有的同型別的物件來初始化新建立的物件:

#include 

using namespace std;

class line;

// 成員函式定義,包括建構函式

line::line(int len)

line::line(const line &obj)

line::~line(void)

int line::getlength( void )

void display(line obj)

// 程式的主函式

int main(

)當上面的**被編譯和執行時,它會產生下列結果:

呼叫建構函式

呼叫拷貝建構函式並為指標 ptr 分配記憶體

呼叫拷貝建構函式並為指標 ptr 分配記憶體

line 大小 : 10

釋放記憶體

呼叫拷貝建構函式並為指標 ptr 分配記憶體

line 大小 : 10

釋放記憶體

釋放記憶體

釋放記憶體

下面的為一些思考

c++支援兩種初始化形式:

拷貝初始化 int a = 5; 和直接初始化 int a(5); 對於其他型別沒有什麼區別,對於類型別直接初始化直接呼叫實參匹配的建構函式,拷貝初始化總是呼叫拷貝建構函式,也就是說:

a x(2);  //直接初始化,呼叫建構函式

a y = x;  //拷貝初始化,呼叫拷貝建構函式

什麼情況使用拷貝建構函式:

類的物件需要拷貝時,拷貝建構函式將會被呼叫。以下情況都會呼叫拷貝建構函式:

(1)乙個物件以值傳遞的方式傳入函式體

(2)乙個物件以值傳遞的方式從函式返回

(3)乙個物件需要通過另外乙個物件進行初始化。

C 學習筆記 拷貝建構函式

拷貝建構函式是一種特殊的建構函式 1 它是建構函式,所以函式名是類名 沒有返回值 2 它是特殊的建構函式 引數形式是固定的 class object 拷貝建構函式的含義 以乙個物件為藍本,來構造另乙個物件。object b object a b 稱作 以b為藍本,建立乙個新的物件a。a是b的乙個拷貝...

拷貝建構函式(C 學習筆記 25)

point p2 p1 其作用是,在建立新物件p2時,用已經存在的物件p1去初始化新物件p2,在這個過程中就要呼叫拷貝建構函式。自定義拷貝建構函式 見例 1 類名 類名 const 類名 物件名 普通的建構函式是在物件建立時被呼叫,而拷貝建構函式在以下3中情況下都會被呼叫 1 當用類的乙個物件去初始...

C 學習筆記 8 閒聊「拷貝建構函式」

what is it?拷貝建構函式,是一種特殊的建構函式,它由編譯器 呼叫來完成一些基於同一類的其他物件的構建及初始化。其唯一的引數 物件的引用 是不可變的 const型別 此函式經常用在函式呼叫時使用者定義型別的值傳遞及返回。拷貝建構函式要呼叫基類的拷貝建構函式和成員函式。如果可以的話,它將用常量...