自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C++ 默認(rèn)構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)和移動(dòng)構(gòu)造函數(shù)的區(qū)別

開發(fā) 前端
默認(rèn)構(gòu)造函數(shù)是沒有任何參數(shù)的構(gòu)造函數(shù),或者所有參數(shù)都有默認(rèn)值的構(gòu)造函數(shù)。當(dāng)我們創(chuàng)建一個(gè)對(duì)象時(shí),若沒有提供初始化參數(shù),程序會(huì)調(diào)用默認(rèn)構(gòu)造函數(shù)進(jìn)行初始化?!?/div>

構(gòu)造函數(shù)三大類型,默認(rèn)構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)和移動(dòng)構(gòu)造函數(shù)?!?/p>

1.默認(rèn)構(gòu)造函數(shù) (Default Constructor) 

默認(rèn)構(gòu)造函數(shù)是沒有任何參數(shù)的構(gòu)造函數(shù),或者所有參數(shù)都有默認(rèn)值的構(gòu)造函數(shù)。當(dāng)我們創(chuàng)建一個(gè)對(duì)象時(shí),若沒有提供初始化參數(shù),程序會(huì)調(diào)用默認(rèn)構(gòu)造函數(shù)進(jìn)行初始化。 

特點(diǎn): 

默認(rèn)構(gòu)造函數(shù)不需要參數(shù),或者所有參數(shù)都有默認(rèn)值?!?/p>

如果沒有顯式定義,編譯器會(huì)自動(dòng)生成一個(gè)默認(rèn)構(gòu)造函數(shù)(如果沒有其他構(gòu)造函數(shù)的話)?!?/p>

它用于初始化對(duì)象的成員變量,并確保對(duì)象處于有效狀態(tài)?!?/p>

示例: 

#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass() {  // 默認(rèn)構(gòu)造函數(shù)
        cout << "Default constructor called!" << endl;
    }
};

int main() {
    MyClass obj;  // 創(chuàng)建對(duì)象時(shí)調(diào)用默認(rèn)構(gòu)造函數(shù)
    return 0;
}

輸出: 

Default constructor called!

在這個(gè)示例中,我們定義了一個(gè)名為 MyClass 的類,并實(shí)現(xiàn)了一個(gè)默認(rèn)構(gòu)造函數(shù)。當(dāng)我們創(chuàng)建 obj 對(duì)象時(shí),程序自動(dòng)調(diào)用了默認(rèn)構(gòu)造函數(shù)。 

2. 拷貝構(gòu)造函數(shù) (Copy Constructor)

拷貝構(gòu)造函數(shù)用于通過現(xiàn)有對(duì)象來創(chuàng)建一個(gè)新的對(duì)象。它通常用于對(duì)象的復(fù)制操作,例如將一個(gè)對(duì)象傳遞給函數(shù)、或者返回一個(gè)對(duì)象時(shí)?!?/p>

特點(diǎn): 

拷貝構(gòu)造函數(shù)接受一個(gè)類的常量引用作為參數(shù)?!?/p>

它的作用是通過另一個(gè)對(duì)象的內(nèi)容來初始化新對(duì)象?!?/p>

當(dāng)對(duì)象被復(fù)制時(shí),編譯器自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)?!?/p>

示例: 

#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass() {  // 默認(rèn)構(gòu)造函數(shù)
        cout << "Default constructor called!" << endl;
    }

    MyClass(const MyClass& other) {  // 拷貝構(gòu)造函數(shù)
        cout << "Copy constructor called!" << endl;
    }
};

int main() {
    MyClass obj1;  // 調(diào)用默認(rèn)構(gòu)造函數(shù)
    MyClass obj2 = obj1;  // 調(diào)用拷貝構(gòu)造函數(shù)
    return 0;
}

輸出: 

Default constructor called!
Copy constructor called!

在這個(gè)示例中,我們創(chuàng)建了一個(gè)對(duì)象 obj1,并將其傳遞給 obj2,這時(shí)會(huì)調(diào)用拷貝構(gòu)造函數(shù)來創(chuàng)建一個(gè)新的對(duì)象 obj2,并復(fù)制 obj1 的內(nèi)容?!?/p>

3. 移動(dòng)構(gòu)造函數(shù) (Move Constructor) 

移動(dòng)構(gòu)造函數(shù)用于通過轉(zhuǎn)移資源來構(gòu)造對(duì)象,避免不必要的資源復(fù)制。在某些情況下,當(dāng)我們傳遞臨時(shí)對(duì)象或者即將銷毀的對(duì)象時(shí),移動(dòng)構(gòu)造函數(shù)會(huì)“竊取”對(duì)象的資源,而不是進(jìn)行復(fù)制操作。這種方式大大提高了程序的性能,尤其是在處理大對(duì)象或動(dòng)態(tài)內(nèi)存分配時(shí)?! ?/p>

特點(diǎn): 

移動(dòng)構(gòu)造函數(shù)接受一個(gè)右值引用作為參數(shù)?!?/p>

它會(huì)將資源從一個(gè)對(duì)象轉(zhuǎn)移到另一個(gè)對(duì)象,而不是復(fù)制資源?!?/p>

移動(dòng)構(gòu)造函數(shù)通常用于處理臨時(shí)對(duì)象或返回對(duì)象。 

示例: 

#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass() {  // 默認(rèn)構(gòu)造函數(shù)
        cout << "Default constructor called!" << endl;
    }

    MyClass(MyClass&& other) {  // 移動(dòng)構(gòu)造函數(shù)
        cout << "Move constructor called!" << endl;
    }
};

MyClass createObject() {
    MyClass temp;
    return temp;  // 移動(dòng)構(gòu)造函數(shù)被調(diào)用
}

int main() {
    MyClass obj = createObject();  // 使用移動(dòng)構(gòu)造函數(shù)
    return 0;
}

輸出: 

Default constructor called!
Move constructor called!

在這個(gè)示例中,createObject 函數(shù)返回一個(gè) MyClass 對(duì)象。當(dāng) temp 返回時(shí),程序會(huì)調(diào)用移動(dòng)構(gòu)造函數(shù),因?yàn)?temp 是一個(gè)臨時(shí)對(duì)象。通過移動(dòng)構(gòu)造函數(shù),obj 將直接接管 temp 的資源,而無需復(fù)制資源?!?/p>

4. 總結(jié) 

默認(rèn)構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)和移動(dòng)構(gòu)造函數(shù)各自有不同的用途:  

默認(rèn)構(gòu)造函數(shù):當(dāng)我們創(chuàng)建一個(gè)對(duì)象時(shí),它會(huì)被調(diào)用,進(jìn)行默認(rèn)初始化?!?/p>

拷貝構(gòu)造函數(shù):在需要復(fù)制對(duì)象時(shí)被調(diào)用,如對(duì)象傳遞、返回值傳遞等?!?/p>

移動(dòng)構(gòu)造函數(shù):當(dāng)傳遞或返回臨時(shí)對(duì)象時(shí)使用,它通過“竊取”資源避免了復(fù)制,提升了性能?!?/p>

責(zé)任編輯:武曉燕 來源: CppPlayer
相關(guān)推薦

2024-12-06 12:00:00

C++構(gòu)造函數(shù)

2014-05-29 10:54:20

C++構(gòu)造函數(shù)

2010-01-28 10:49:22

C++構(gòu)造函數(shù)

2023-11-28 11:51:01

C++函數(shù)

2011-07-20 13:40:09

拷貝構(gòu)造函數(shù)

2022-07-26 00:36:06

C#C++函數(shù)

2009-08-13 17:30:30

C#構(gòu)造函數(shù)

2010-01-27 17:16:52

C++構(gòu)造函數(shù)

2010-07-20 09:52:27

Perl構(gòu)造函數(shù)

2021-12-10 10:45:36

C++函數(shù)Stock

2009-08-14 17:24:28

C#構(gòu)造函數(shù)和析構(gòu)函數(shù)

2010-01-22 11:13:16

C++靜態(tài)

2010-01-27 10:13:22

C++類對(duì)象

2010-01-27 16:10:32

C++靜態(tài)構(gòu)造函數(shù)

2010-01-25 14:00:27

C++類

2010-01-25 14:43:00

C++構(gòu)造函數(shù)

2010-01-25 17:05:37

C++語言

2009-07-31 14:15:38

C# 構(gòu)造函數(shù)

2009-08-24 18:09:13

C#構(gòu)造函數(shù)

2009-07-31 16:06:50

成員函數(shù)構(gòu)造函數(shù)C#
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)