1. 程式人生 > >C++(二十六) — 構造函數、析構函數、對象數組

C++(二十六) — 構造函數、析構函數、對象數組

style 空間 數組 註意 默認 全部 訪問類 類名 生成

1、構造函數

(1)每個類都要定義它自己的構造函數和析構函數,是類的成員函數。

  特點:名稱與類名相同;沒有返回值;一定是共有函數,可以直接訪問類內所有成員函數;可以帶默認形參,可以重載;

class clock
{
public:
    // 無參構造函數
    clock()
    {
        cout << "無參構造函數" << endl;
    }
    // 有參構造函數
    clock(int h, int m , int s)
    {
        hour = h;
        minute = m;
        second 
= s; cout << "有參構造函數" << endl; } //// 有默認參數值的有參構造函數 //clock(int h=8, int m=20, int s=20) //{ // hour = h; // minute = m; // second = s; // cout << "有默認參數值的有參構造函數" << endl; //} //拷貝構造函數完成,用一個對象初始化另一個對象 clock(const clock &t) // const 加不加都可以
{ cout << "復制構造函數" << endl; } private: int hour; int minute; int second; }; void main() { clock myclock; // 調用無參構造函數 //clock myclock_1();// 調用有參構造函數,此時會出錯,因為沒有傳參數 clock myclock_2(8,20,20);// 有參構造函數,必須要寫上參數 clock myclock_3(myclock_2);// 調用復制構造函數 system("pause
"); }

(2)註意:

  (1)類中沒有定義任何構造函數時,才使用默認構造函數;

  (2)不能同時出現無參構造函數和帶有全部默認參數值的構造函數;二者只能出現一個;

  (3)復制構造函數,使用一個已存在的對象,初始化一個新的同類對象。如果未定義,系統將會自動生成;但是,如果申請動態空間(堆空間),則必須定義。

2、對象數組

  解釋為什麽需要構造函數,在定義對象數組時,自動初始化。

class student
{
public:
    student(int, char*);
    student();
    ~student();
    void set(int i, char* c);
    void printstu()
    {
        cout << "id: " << id << "   name: " << name << setw(5) << endl;
    }
private:
    int id;
    string name;
};
student::student()
{
    cout << "默認無參構造函數" << endl;
}
student::student(int i, char* c)
{
    id = i;
    name = c;
    cout << "有參構造函數" << endl;
}
student::~student()
{
    cout << "析構函數" << endl;
}

void student::set(int i, char* c)
{
    id = i;
    name = c;
}

void main()
{
    // 對象數組
    student stu[5] = {
        student(1,"li"),
        student(2,"wang")
    };
    stu[2].set(3, "zhao");
    system("pause");
}

  定義兩個構造函數,此時定義對象數組時,可以不用初始化。

  構造函數在定義對象時調用,析構函數在程序結束時調用,而且,析構順序與構造順序相反。

C++(二十六) — 構造函數、析構函數、對象數組