C++ 基礎(chǔ)教程

C++ 流程控制

C++ 函數(shù)

C++ 數(shù)組 & 字符串

C++ 數(shù)據(jù)結(jié)構(gòu)

C++ 類 & 對(duì)象

C++ 指針

C++ 繼承

C++ STL 教程

C++ 參考手冊(cè)

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

在本文中,您將學(xué)習(xí)C ++中的構(gòu)造函數(shù)。您將學(xué)習(xí)什么是構(gòu)造函數(shù),如何創(chuàng)建它以及C ++中的構(gòu)造函數(shù)類型。

構(gòu)造函數(shù)是成員函數(shù)的一種特殊類型,它在創(chuàng)建對(duì)象時(shí)會(huì)自動(dòng)對(duì)其進(jìn)行初始化。

編譯器通過其名稱和返回類型將給定的成員函數(shù)標(biāo)識(shí)為構(gòu)造函數(shù)。

構(gòu)造函數(shù)與該類具有相同的名稱,并且沒有任何返回類型。同樣,構(gòu)造函數(shù)始終是公共的。

... .. ...
class temporary
{
private: 
    int x;
    float y;
public:
    // 構(gòu)造函數(shù)
    temporary(): x(5), y(5.5)
    {
        // 構(gòu)造函數(shù)體
    }
    ... ..  ...
};

int main()
{
    Temporary t1;
    ... .. ...
}

上面的程序顯示了定義的構(gòu)造函數(shù),沒有返回類型,并且名稱與類相同。

構(gòu)造函數(shù)如何工作?

在上面的代碼中,temporary()是一個(gè)構(gòu)造函數(shù)。

創(chuàng)建類的對(duì)象時(shí),將自動(dòng)調(diào)用構(gòu)造函數(shù)temporary,并將x其初始化為5,然后y初始化為5.5。

您還可以按以下方式初始化構(gòu)造函數(shù)體內(nèi)的數(shù)據(jù)成員。但是,這種不推薦使用此方法。

temporary()
{
   x = 5;
   y = 5.5;
}
// 這種方法不是首選的。

在C ++中使用構(gòu)造函數(shù)

假設(shè)您正在處理100個(gè)Person對(duì)象,并且數(shù)據(jù)成員age的默認(rèn)值為0。手動(dòng)初始化所有對(duì)象將是一項(xiàng)非常繁瑣的任務(wù)。

相反,您可以定義一個(gè)初始化age為0 的構(gòu)造函數(shù)。然后,您要做的就是創(chuàng)建一個(gè)Person對(duì)象,構(gòu)造函數(shù)將自動(dòng)初始化age。

這些情況在處理對(duì)象數(shù)組時(shí)經(jīng)常出現(xiàn)。

另外,如果要在創(chuàng)建對(duì)象后立即執(zhí)行一些代碼,可以將代碼放在構(gòu)造函數(shù)的主體內(nèi)。

示例1:C ++中的構(gòu)造方法

計(jì)算并顯示矩形的面積。

#include <iostream>
using namespace std;

class Area
{
    private:
       int length;
       int breadth;

    public:
       // 構(gòu)造函數(shù)
       Area(): length(5), breadth(2){ }

       void GetLength()
       {
           cout << "分別輸入長(zhǎng)度和寬度: ";
           cin >> length >> breadth;
       }

       int AreaCalculation() {  return (length * breadth);  }

       void DisplayArea(int temp)
       {
           cout << "面積: " << temp;
       }
};

int main()
{
    Area A1, A2;
    int temp;

    A1.GetLength();
    temp = A1.AreaCalculation();
    A1.DisplayArea(temp);

    cout << endl << "不從用戶那里獲取值時(shí)的默認(rèn)面積為:" << endl;

    temp = A2.AreaCalculation();
    A2.DisplayArea(temp);

    return 0;
}

在這個(gè)程序中,創(chuàng)建類Area來處理面積相關(guān)的函數(shù)。它有兩個(gè)數(shù)據(jù)成員length和breadth。

定義了一個(gè)初始化length為5和breadth為2的構(gòu)造函數(shù)。

我們還具有三個(gè)附加的成員函數(shù)GetLength(), AreaCalculation() 和 DisplayArea(),分別從用戶處獲取長(zhǎng)度,計(jì)算面積以及顯示面積。

當(dāng)創(chuàng)建對(duì)象A1和A2時(shí),由于構(gòu)造函數(shù)的關(guān)系,這兩個(gè)對(duì)象的長(zhǎng)度(length)和(breadth)寬度分別初始化為5和2。

然后,調(diào)用成員函數(shù)GetLength(),該函數(shù)從用戶那里獲取對(duì)象A1的長(zhǎng)度(length)和(breadth)寬度值。 這改變了對(duì)象A1的長(zhǎng)度(length)和(breadth)寬度。

然后,通過調(diào)用AreaCalculation()函數(shù)計(jì)算對(duì)象A1的面積,并將其存儲(chǔ)在變量temp中,最后顯示出來。

對(duì)于對(duì)象A2,不要求用戶提供任何數(shù)據(jù)。 因此,長(zhǎng)度(length)和(breadth)寬度分別保持5和2。

然后,計(jì)算并顯示A2的面積為10。

輸出結(jié)果

分別輸入長(zhǎng)度和寬度: 6
7
面積: 42
不從用戶那里獲取值時(shí)的默認(rèn)面積為:
面積: 10

構(gòu)造函數(shù)重載

構(gòu)造函數(shù)也可以類似于函數(shù)重載的方式重載。

重載的構(gòu)造函數(shù)具有相同的名稱(類的名稱),但參數(shù)個(gè)數(shù)不同。

根據(jù)傳遞的參數(shù)的個(gè)數(shù)和類型,將調(diào)用特定的構(gòu)造函數(shù)。

由于存在多個(gè)構(gòu)造函數(shù),因此在創(chuàng)建對(duì)象時(shí)也應(yīng)傳遞構(gòu)造函數(shù)的參數(shù)。

示例2:構(gòu)造函數(shù)重載

// 源代碼演示重載的構(gòu)造函數(shù)的工作原理
#include <iostream>
using namespace std;

class Area
{
    private:
       int length;
       int breadth;

    public:
       // 無(wú)參數(shù)構(gòu)造函數(shù)
       Area(): length(5), breadth(2) { }

       // 有兩個(gè)參數(shù)的構(gòu)造函數(shù)
       Area(int l, int b): length(l), breadth(b){ }

       void GetLength()
       {
           cout << "分別輸入長(zhǎng)度和寬度: ";
           cin >> length >> breadth;
       }

       int AreaCalculation() {  return length * breadth;  }

       void DisplayArea(int temp)
       {
           cout << "面積: " << temp << endl;
       }
};

int main()
{
    Area A1, A2(2, 1);
    int temp;

    cout << "沒有傳遞參數(shù)時(shí)的默認(rèn)面積。" << endl;
    temp = A1.AreaCalculation();
    A1.DisplayArea(temp);

    cout << "(2,1)作為參數(shù)傳遞時(shí)的面積。" << endl;
    temp = A2.AreaCalculation();
    A2.DisplayArea(temp);

    return 0;
}

對(duì)于對(duì)象A1,創(chuàng)建對(duì)象時(shí)不傳遞任何參數(shù)。

因此,將調(diào)用不帶參數(shù)的構(gòu)造函數(shù),該構(gòu)造函數(shù)將長(zhǎng)度(length)初始化為5,寬度(breadth)初始化為2。因此,對(duì)象A1的面積將為10。

對(duì)于對(duì)象A2,在創(chuàng)建對(duì)象時(shí)將2和1作為參數(shù)傳遞。

因此,將調(diào)用具有兩個(gè)參數(shù)的構(gòu)造函數(shù),該構(gòu)造函數(shù)將長(zhǎng)度(length)初始化為l(在這種情況下為2),并將寬度(breadth)初始化為b(在這種情況下為1)。 因此,對(duì)象A2的面積將為2。

輸出結(jié)果

沒有傳遞參數(shù)時(shí)的默認(rèn)面積。
面積: 10
(2,1)作為參數(shù)傳遞時(shí)的面積。
面積: 2

默認(rèn)拷貝構(gòu)造函數(shù)

一個(gè)對(duì)象可以用另一個(gè)相同類型的對(duì)象初始化。這與將一個(gè)類的內(nèi)容復(fù)制到另一個(gè)類是一樣的。

在上面的程序中,如果你想初始化一個(gè)對(duì)象A3,使它包含與A2相同的值,可以這樣執(zhí)行:

....
int main()
{
   Area A1, A2(2, 1);

   // 將A2的內(nèi)容復(fù)制到A3
   Area A3(A2);
     OR, 
   Area A3 = A2;
}

您可能會(huì)想,您需要?jiǎng)?chuàng)建一個(gè)新的構(gòu)造函數(shù)來執(zhí)行這個(gè)任務(wù)。但是,不需要額外的構(gòu)造函數(shù)。這是因?yàn)槟J(rèn)情況下,復(fù)制構(gòu)造函數(shù)已經(jīng)內(nèi)置到所有類中。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清