什么是構造函數?
構造函數是類的成員函數,用於初始化類的對象。在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); // 隱式調用
- 參數化構造函數的用途:
- 創建對象時,使用它來初始化具有不同值的不同對象的各種數據元素。
- 它用於重載構造函數。
- 一個類中可以有多個構造函數嗎
是的,這稱為構造函數重載。
3.復制構造函數:復制構造函數是一個成員函數,它使用同一類的另一個對象初始化一個對象。有關復制構造函數的詳細文章。
每當我們為一個類定義一個或多個非默認構造函數(帶參數)時,也應顯式定義一個默認構造函數(不帶參數),因為在這種情況下編譯器將不提供默認構造函數。但是,沒有必要,但是始終定義默認構造函數被認為是最佳實踐。
更多資料見: C ++中的構造方法
