溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中賦值函數(shù)和拷貝構造函數(shù)(舉例說明)

發(fā)布時間:2020-07-14 11:20:26 來源:網絡 閱讀:344 作者:淺唱逝流年 欄目:編程語言

拷貝構造函數(shù)發(fā)生在對象還沒有創(chuàng)建,需要創(chuàng)建時

如:   MyClass obj1(1);  

            MyClassobj3 = obj1;

賦值操作符重載僅發(fā)生在對象已經執(zhí)行過構造函數(shù),即已經創(chuàng)建的情況下

如:

                 MyClass obj1(1);

                 MyClass obj3;

                obj3 = obj1;



具體代碼如下:

class MyClass

{

public:

                MyClass( int i = 0)

                {

                                cout << i;

                }

                MyClass( const MyClass &x)

                {

                                cout << 2;

                }

                 MyClass &operator=(const MyClass & x)

                {

                                cout << 3;

                                 return *this ;

                }

                ~MyClass()

                {

                                cout << 4;

                }

};

int main()

{

                 MyClass obj1(1);

                 MyClass  obj2(2);

                 MyClass obj3;

                obj3 = obj1;

                 return 0;

}

輸出:1203444

先創(chuàng)建對象obj1,調用構造函數(shù)并初始化為1,輸出1

再創(chuàng)建對象obj2,調用構造函數(shù)并初始化為2,輸出2

創(chuàng)建對象obj3,調用構造函數(shù),使用默認值為0,輸出0

obj1賦值給obj3時,調用賦值函數(shù),輸出3

再依次析構,析構的順序和調用構造的順序相反

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


class MyClass

{

public:

                MyClass( int i = 0)

                {

                                cout << i;

                }

                MyClass( const MyClass &x)

                {

                                cout << 2;

                }

                 MyClass &operator=(const MyClass & x)

                {

                                cout << 3;

                                 return *this ;

                }

                ~MyClass()

                {

                                cout << 4;

                }

};

int main()

{

                 MyClass obj1(1);

                 MyClass   obj2(2);

                 MyClass obj3 = obj1;

                 return 0;

}



輸出:122444

依次創(chuàng)建對象obj1,obj2,調用兩次構造,分別輸出初始化的值1,2

MyClass obj3 = obj1;由于賦值的時候obj3還沒有創(chuàng)建,所以會調用拷貝構造函數(shù),輸出2

再依次析構三個對象


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI