C 複製控制

2021-08-29 21:52:50 字數 2392 閱讀 2876

當定義乙個新型別時,通過使用複製建構函式,賦值操作符,析構函式來顯示或隱式地完成物件的複製,賦值,撤銷

1.複製建構函式:只有單個形參,而且該形參是對本類型別物件的引用(通常是const修飾)的建構函式,稱為~

複製函式可用於:

[color=red] 1)根據另乙個同型別的物件顯示或隱式初始化乙個物件.

2)複製乙個物件,將它作為實參傳給乙個函式

3)從函式返回時複製乙個物件

4)初始化順序容器中的元素

5)根據元素初始化式列表初始化陣列元素[/color]

a.物件初始化形式

直接初始化:一般是將初始化式放在圓括號內

複製初始化:使用=符號

string str = "123"; //copy-initialization

string str1 = str; //copy-initialization

b.形參與返回值

當形參或返回值為類型別時,由複製建構函式進行複製

string make_copy(size_t, const string&, const string&);

c.初始化容器元素

vectorsevc(5);

先用string預設建構函式建立乙個臨時值為初始化svec,然後使用複製建構函式將臨時值複製到sevc的每個元素

2.合成的複製建構函式

執行逐個成員初始化,將新物件初始化原物件的副本

3.定義自己的複製建構函式

myclass(const myclass &mc)

複製建構函式一般不設定為explicit

4.禁止複製

可以將複製建構函式顯示的宣告為private

5.賦值操作符:對於已初始化過類型別的物件而言,對其賦值時呼叫賦值操作符函式

myclass& operator=(const myclass&)

6.合成的賦值操作符

逐個成員賦值

一般賦值操作符與複製建構函式一起使用

7.析構函式:撤銷類物件,自動呼叫

三法則:如果類需要析構函式,則其也需要複製建構函式和賦值操作符

~myclass()

8.合成析構函式:按照宣告的逆序對非static物件進行撤銷,但[color=red][b]不能刪除指標成員所指向的物件[/b][/color]

示例:標頭檔案,rectangle.h

/*language:c++

author:longsy

file:rectangle.h

*/namespace longsy ;

}

實現檔案,rectangle.cpp

/*language:c++

author:longsy

file:rectangle.cpp

*/#include "rectangle.h"

using namespace longsy;

#include

rectangle::rectangle(int w,int h) : width(w),height(h)

rectangle::rectangle(const rectangle &rect)

rectangle::~rectangle()

void rectangle::draw()

測試檔案,test.cpp

/*language:c++

author:longsy

file:test.cpp

*/#include "rectangle.h"

using namespace longsy;

int main()

/*執行結果:

rectangle(int w,int h)

draw the rectangle,width:0,height:0

rectangle(int w,int h)

draw the rectangle,width:1,height:1

rectangle(const rectangle &rect)

draw the rectangle,width:1,height:1

rectangle(int w,int h)

draw the rectangle,width:2,height:2

operator=(const rectangle &rect)

draw the rectangle,width:1,height:1

~rectangle()

~rectangle()

~rectangle()

~rectangle()

*/

C 複製控制

1 複製建構函式 只有單個形參,而且該形參是對本類型別物件的引用 常用const修飾 這樣的建構函式稱為複製建構函式。直接初始化呼叫的是實參匹配的建構函式,複製初始化呼叫的複製建構函式。複製初始化首先使用指定建構函式建立乙個臨時物件,然後用複製建構函式將那個臨時物件複製到正在建立的物件。合成的複製建...

11 C 類複製控制

類複製控制 前言,定義,基類與派生類,設計指導 1.前言 複製控制通常指類的複製建構函式,賦值操作運算子,析構函式 1.1複製建構函式 引入複製建構函式是為了讓類的物件直接生成另乙個物件,同時把此物件的資料複製到另乙個物件中 如果類中沒有實現複製建構函式,編譯器自動新增乙個,如果我們不需要,則把它明...

C 中類的複製控制

每種型別,無論是內建型別還是類型別,都對該型別物件的一組操作進行了定義。每種型別還定義了建立該型別的物件時會發生什麼 建構函式 該類型別物件的初始化。當定義乙個新型別的時候,需要顯式或者隱式地指定複製,賦值和撤銷該型別的物件時會發生什麼,這是通過定義特殊成員 複製建構函式,賦值操作符和析構函式來達到...