1. 程式人生 > >C++(建構函式與解構函式)

C++(建構函式與解構函式)

C++(建構函式與解構函式)


1. 建構函式

用於對類的物件的初始化,建構函式名與類名相同。

可在類內直接定義,也可在類內宣告類外定義(定義時在函式名前加類名::)。

建構函式無返回值型別。

class C
{
public:
C(int a,int b);//類內宣告
private:
int m_num1;
int m_num2;
};
//類外定義
C::C(int a,int b)
{
m_num1=a;
m_num2=b;
}
  1. 帶引數的建構函式
    初始化可以在函式體內,也可在函式體外。可以過載。
    上例為函式體內進行初始化
    函式體外初始化:

    C::C(int a,int b):m_num1(a),m_num2(2){};
    //只能用()進行初始化,不能用“=”,多個引數之間用逗號隔開
    //“:”到“{”的部分為初始化列表

    只能在初始化列表裡進行初始化的情況:
    1、const成員和引用成員的初始化
    2、類A的建構函式有參,其成員是類B的物件,但是類B的建構函式無參。

  2. 預設建構函式
    若未定義一個類的建構函式,則C++提供一個預設的建構函式。預設建構函式僅僅負責建立物件,而不做任何初始化工作。

  3. 拷貝建構函式
    用一個物件的值建立並初始化另一個物件

    拷貝建構函式名與類名相同,沒有返回值型別,只有一個引數(為該類物件的引用)。

    格式為
    類名::拷貝建構函式名::(類名&引用名)
    {函式體}


    eg:
    class C
    {
    public:
    C(int a,int b)//帶參建構函式
    {
    m_num1=a;
    m_num2=b;
    }
    C(C&obj)//拷貝建構函式的定義
    {
    m_num1=obj.m_num1;
    m_num2=obj.m_num2;
    }
    private:
    int m_num1;
    int m_num2;
    int main()
    {
    C objA(1,2);//objA的m_num1的值為1,m_num2的值為2
    C objB(objA);//此時objB的成員被objB賦值
    return 0;
    }


2. 解構函式

結束物件的生命期,開啟一個檔案使用完後關閉檔案

無引數和返回值型別,不能隨意呼叫,不能過載。解構函式名為~類名。