C++中的構造函數


什么是構造函數? 
構造函數是類的成員函數,用於初始化類的對象在C ++中,創建對象(類的實例)時會自動調用Constructor。它是該類的特殊成員函數


構造函數與普通成員函數有何不同?

構造函數與普通函數在以下方面有所不同: 

  • 構造函數與類本身具有相同的名稱
  • 構造函數沒有返回類型
  • 創建對象時會自動調用構造函數。
  • 如果我們未指定構造函數,則C ++編譯器會為我們生成一個默認構造函數(不帶參數,並且具有空主體)。

用一個真實的例子來了解C ++中構造函數的類型。假設您去商店買了一個記號筆。當您想購買標記筆時,有哪些選擇?第一個你去商店說要給我一個記號筆。因此,只說給我一個標記就意味着您沒有設置哪個品牌名稱和哪種顏色,也沒有提及任何事情,只是說您想要一個標記。因此,當我們說我只想要一個標記筆時,無論市場上還是他的商店中經常出售的標記筆,他都將交給他。這就是默認的構造函數!第二種方法是您去商店說我要一個標記為紅色和XYZ品牌的標記。所以您提到這件事,他會給您這個標記。因此,在這種情況下,您已經給出了參數。這就是參數化的構造函數!然后是第三個,您去商店說我要這樣的記號筆(您手上的記號筆)。因此,店主將看到該標記。好的,他會為您提供一個新標記。因此,復制該標記。這就是復制構造函數!

默認構造函數: 默認構造函數是不帶任何參數的構造函數,比如下面的例子:

// Cpp program to illustrate the
// concept of Constructors
#include <iostream>
using namespace std;
 
class construct 
{
public:
    int a, b;
 
    // Default Constructor
    construct()
    {
        a = 10;
        b = 20;
    }
};
 
int main()
{
    // Default constructor called automatically
    // when the object is created
    construct c;
    cout << "a: " << c.a << endl
         << "b: " << c.b;         //打印10,20
    return 1;
}

注意:即使我們沒有顯式定義任何構造函數,編譯器也會自動隱式提供默認的構造函數。

參數化的構造函數:可以將參數傳遞給構造函數。通常,這些參數有助於在創建對象時初始化對象。要創建參數化的構造函數,只需像對其他任何函數那樣向其添加參數即可。定義構造函數的主體時,請使用參數初始化對象。 

#include <iostream>
using namespace std;
 
class Point 
{
private:
    int x, y;
 
public:
    // Parameterized Constructor
    Point(int x1, int y1)
    {
        x = x1;
        y = y1;
    }
 
    int getX()
    {
        return x;
    }
    int getY()
    {
        return y;
    }
};
 
int main()
{
    // Constructor called
    Point p1(10, 15);
 
    // Access values assigned by constructor
    cout << "p1.x = " << p1.getX() << ", p1.y = " << p1.getY();
 
    return 0;
}

當在參數化構造函數中聲明對象時,必須將初始值作為參數傳遞給構造函數。對象聲明的常規方法可能不起作用。構造函數可以顯式或隱式調用。

Example e = Example(0, 50); // 顯式調用

Example e(0, 50);           // 隱式調用
  • 參數化構造函數的用途: 
    1. 創建對象時,使用它來初始化具有不同值的不同對象的各種數據元素。
    2. 它用於重載構造函數。
  • 一個類中可以有多個構造函數嗎   

            是的,這稱為構造函數重載

3.復制構造函數:復制構造函數是一個成員函數,它使用同一類的另一個對象初始化一個對象。有關復制構造函數的詳細文章

每當我們為一個類定義一個或多個非默認構造函數(帶參數)時,也應顯式定義一個默認構造函數(不帶參數),因為在這種情況下編譯器將不提供默認構造函數。但是,沒有必要,但是始終定義默認構造函數被認為是最佳實踐。 

更多資料見: C ++中的構造方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM