C 中賦值函式和拷貝建構函式(舉例說明)

2021-07-12 03:55:09 字數 967 閱讀 1518

拷貝建構函式發生在物件還沒有建立,需要建立時如:

myclass

obj1(1);

myclass

obj3 = obj1;

賦值操作符過載僅發生在物件已經執行過建構函式,即已經建立的情況下

如:myclass

obj1(1);

myclass

obj3;

obj3 = obj1;

具體**如下:

class

myclass

myclass(

const

myclass &x

) myclass

&operator=(

const

myclass

& x)~myclass()

};int

main()

輸出:1203444

先建立物件obj1,呼叫建構函式並初始化為1,輸出1

再建立物件obj2,呼叫建構函式並初始化為2,輸出2

建立物件obj3,呼叫建構函式,使用預設值為0,輸出0

obj1賦值給obj3時,呼叫賦值函式,輸出3

再依次析構,析構的順序和呼叫構造的順序相反

先析構obj3,在析構obj2,最後析構obj1

class

myclass

myclass(

const

myclass &x

) myclass

&operator=(

const

myclass

& x)~myclass()

};int

main()

輸出:122444

依次建立物件obj1,obj2,呼叫兩次構造,分別輸出初始化的值1,2

myclass

obj3 = obj1;由於賦值的時候obj3還沒有建立,所以會呼叫拷貝建構函式,輸出2

再依次析構三個物件

c 拷貝建構函式和賦值函式

準備實現gof上面乙個迭代器模式,用到了上面的list基本類,但是一直對賦值函式和拷貝建構函式不是很熟悉,就研讀了一下effective c 的關於這方面的一章,頗有收穫,抽取了我認為精華的部分分享給大家。由於一直對c 這一類的用法不是很熟悉,有錯誤或者優化或者需要特別強調的地方希望朋友們幫忙指出來...

C 拷貝建構函式和賦值函式

include using namespace std class string 建構函式 析構函式 賦值函式是每個類最基本的函式。每個類只有乙個析構函式和乙個賦值函式。但有很兩個建構函式,乙個為拷貝建構函式,其他為普通建構函式。對於乙個類,如果不編寫這四個函式,c 編譯器將自動為a產生四個預設函式...

拷貝建構函式和賦值建構函式

class cmystring 賦值建構函式 cmystring cmystring operator const cmystring str 新分配記憶體,將str的m pdata記憶體拷貝到m pdata中 m pdata new char strlen str.m pdata 1 strcpy...