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