當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


C++ Constructor和Destructor的區別用法及代碼示例

構造函數
構造函數是類的成員函數,與類名同名。它有助於初始化類的對象。它可以接受參數,也可以不接受。它用於為類的對象分配內存。每當創建類的實例時都會調用它。它可以帶參數或不帶參數手動定義。一個類中可以有多個構造函數。它可以重載,但不能繼承或虛擬。有一個複製構造函數的概念,用於從另一個對象初始化一個對象。
用法:

  ClassName()
   {
     //Constructor's Body 
   } 

析構函數
與構造函數一樣,析構函數也是類的成員函數,該函數與類名同名,前麵帶有波形符 (~) 運算符。它有助於釋放對象的內存。當類的對象被釋放或刪除時調用它。在類中,始終有一個不帶任何參數的析構函數,因此不能重載。它總是以與構造函數相反的順序調用。如果一個類被另一個類繼承,並且兩個類都有析構函數,則首先調用子類的析構函數,然後調用父類或基類的析構函數。
用法:

  ~ClassName()
   { 
       //Destructor's Body
   }

注意:如果我們沒有為類內的成員指定任何訪問修飾符,則默認情況下成員的訪問修飾符將為 Private。
構造函數和析構函數的示例/實現:

C++


#include <iostream>
using namespace std;
class Z
{
public:
    // constructor
    Z()
    {
        cout<<"Constructor called"<<endl;
    }
    // destructor
    ~Z()
    {
        cout<<"Destructor called"<<endl;
    }
};
int main()
{
    Z z1;   // Constructor Called
    int a = 1;
    if(a==1)
    {
        Z z2;  // Constructor Called
    }  // Destructor Called for z2
} //  Destructor called for z1

輸出:

Constructor called
Constructor called
Destructor called
Destructor called 

C++中構造函數和析構函數的區別:

S. 編號 構造函數 析構函數
1. 構造函數有助於初始化類的對象。 而析構函數用於銷毀實例。
2. 它被聲明為類名(參數,如果有){構造函數的主體}. 而它被聲明為~ 類名(無參數){ }.
3. 構造函數可以接受參數,也可以不接受參數。 雖然它不能有任何參數。
4. 創建類的實例或對象時會調用構造函數。 當類的對象被釋放或刪除時調用它。
5. 構造函數用於為實例或對象分配內存。 而它用於釋放類對象的內存。
6. 構造函數可以重載。 雖然不能超載。
7. 構造函數的名稱與類名稱相同。 這裏,它的名稱也與前麵帶有平鋪(~)運算符的類名稱相同。
8. 在一個類中,可以有多個構造函數。 在一個類中,總是有一個析構函數。
9. 有一個複製構造函數的概念,用於從另一個對象初始化一個對象。 而這裏,沒有複製析構函數的概念。
10. 它們通常按連續順序調用。 它們通常以與構造函數相反的順序調用。


相關用法


注:本文由純淨天空篩選整理自MKS075大神的英文原創作品 Difference Between Constructor and Destructor in C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。