c 拷貝建構函式

2021-06-25 10:09:08 字數 3334 閱讀 1721

一、整體**

test.h

[cpp]

#ifndef _test_h_

#define _test_h_

class test

public:

// 如果類不提供任何乙個建構函式,系統將為我們提供乙個不帶引數的

// 預設的建構函式

test();

explicit test(int num);

test(const test& other);

void display();

test&operator=(const test& other);

~test();

public:

int num_;

#endif// _test_h_

test.cpp

[cpp]

#include"test.h"

#include

usingnamespace std;

// 不帶引數的建構函式稱為預設建構函式

test::test() : num_(0)

//num_ = 0;

cout《"initializing default"《endl;

test::test(int num) : num_(num)

//num_ = num;

cout《"initializing "《num_《endl;

test::test(const test& other) : num_(other.num_)

//num_ = other.num_;

cout《"initializing with other "《num_《endl;

test::~test()

cout《"destroy "《num_《endl;

void test::display()

cout《"num="《num_《endl;

test& test::operator=(const test& other)

cout《"test::operator="《endl;

if (this==&other)

return*this;

num_ = other.num_;

return*this;

01.cpp

[cpp]

01.cpp

#include"test.h"

#include

usingnamespace std;

test testfun(test t)

t.num_=12;

return t;

test& testfun2(test t)

return t;

test testfun3(test& t)

return t;

test& testfun4(test& t)

//return const_cast(t);

return t;

int main(void)

test t(10);

test t2 = testfun(t);

cout《"……"《endl;

return 0;

二、執行結果

1、test t2 = testfun(t);

(1)test t(10) :生成乙個物件1(num_是10),對應initializing 10

(2)把t物件傳遞到形式引數時:呼叫拷貝建構函式,由物件1生成了乙個物件2(num_是10),之後又改變了num_為12,對應initializing with other10

(3)返回值時:呼叫了拷貝建構函式,由物件2生成了乙個物件3(num_是12),對應initializing with other12

(5)testfun返回後:物件2銷毀了,對應destroy 12

(6)……

(7)程式結束後:首先銷毀聽t2(接管了物件1),然後銷毀物件1,對應destroy 12 ,destroy 10

testfun(t) 此時沒有物件接管,執行結果如下:

(1)test t(10) :生成乙個物件1(num_是10),對應initializing 10

(2)把t物件傳遞到形式引數時:呼叫拷貝建構函式,由物件1生成了乙個物件2(num_是10),之後又改變了num_為12,對應initializing with other10

(3)返回值時:呼叫了拷貝建構函式,由物件2生成了乙個物件3(num_是12),對應initializing with other12

(4)testfun返回後:物件3銷毀,物件2銷毀,對應destroy 12,destroy 12

(5)……

(6)程式結束後:銷毀物件1,對應destroy 10

2、test t2 = testfun2(t);

(1)test t(10) :生成乙個物件1(num_是10),對應initializing 10

(2)把t物件傳遞到形式引數時:呼叫拷貝建構函式,由物件1生成了乙個物件2(num_是10),對應initializing with other 10

(3)test t2 = testfun2(t):由物件2生成了物件3(num_是10),對應initializing with other 10

(4)testfun2返回後:物件2銷毀,對應destory 10

(5)……

(6)程式結束後:銷毀物件3,銷毀物件1,對應destory 10,destory 10

3、test t2 = testfun3(t);

(1)test t(10) :生成乙個物件1(num_是10),對應initializing 10

(2)返回值時:由物件1生成了物件2(num_是10),對應initializing with other 10

(3)test t2 = testfun3(t):t2物件接管了物件2

(4)……

(5)程式結束後:銷毀t2物件,銷毀物件1,對應destroy 10,destroy 10

4、test t2 = testfun4(t);

(1)test t(10) :生成乙個物件1(num_是10),對應initializing 10

(2)test t2 = testfun4(t):由物件1生成了物件t2(num_是10),對應initializing with other 10

(3)……

(4)程式結束後:銷毀t2物件,銷毀物件1,對應destroy 10,destroy 10

三、什麼時候會呼叫

拷貝建構函式

乙個物件初始化另乙個全新的物件時,會呼叫,如test t;  test t2 = t;

test t ; test t2; t2=t1;會呼叫

賦值語句。

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 拷貝建構函式

1 什麼時候會用到拷貝建構函式?當任何你想影印東西的時候,而不管東西被影印成什麼樣子。即任何你想利用乙個已有的類例項給另乙個類例項賦值時,這種賦值可能是顯式的,也可能是隱式的 顯式 classa 1 class 2 隱式 函式的形參有用到類物件卻沒有用引用或傳址技術時 函式的返回值是乙個物件也沒有應...

C 拷貝建構函式

1 拷貝構造 copy建構函式用於將乙個物件拷貝到新建立的物件中。也就是說它用於初始化過程中,而不是常規的賦值過程中。一般的copy建構函式原型通常如下 class name const class name rhs 它接受乙個指向類物件的常量引用作為引數。例如,cstring類的拷貝建構函式的原型...