c++-構造函數與析構函數

類的數據成員是不能在聲明的時候初始化的,因爲類並不是一個實體,而是一種抽象類型,並不佔用內存空間,顯然無法容納數據。

如果一個類的成員都是共有的,則可以這樣定義:

#include <iostream>

using namespace std;

class A
{
    public:
        int a_, b_, c_; 
        void display()
        {   
            cout<<a_<<" "<<b_<<"        "<<c_<<endl;
        }   
};

int main()
{
    A a={1,2,3};  //一般都不這樣,這樣破壞了類的封裝
    a.display();
    return 0;

}

構造函數是一種特殊的成員函數,與其他成員函數不同,不需要用戶來調用,而是在建立對象時自動執行。保證類的每個成員變量都能正確的初始化。

構造函數的名字必須與類名相同,無返回值類型

注意:

(1)在類對象進入作用域時調用構造函數

(2)構造函數沒有返回值,因此不需要再定義構造函數時聲明類型,void也不要

(3)不能被用戶調用,系統自動調用。

(4)一般構造函數定義爲public,也有private(比如singleton模式)

(5)如果用戶沒有定義構造函數,系統會默認添加一個空的無參的構造函數,一旦用戶定義了,系統就不會提供

(6)可以有任意個數的參數,可以重載

(7)默認參數的構造函數最好不要和構造函數的重載一塊使用,以免產生二義性

析構函數:當對象的生命週期結束時,會自動執行析構函數。

無返回值,無參數,無函數類型,由於沒有參數,所以就不能被重載。

析構函數可以顯式的調用

一般情況下:先構造的後析構,後構造的先析構,具體情況還要看對象的作用域

#include <iostream>

using namespace std;

class Time
{
public:
	Time()
	{
		hour_ = 0;
		minute_ = 0;
		second_ = 0;
		cout<<"Init"<<" "<<hour_<<endl;
	}
	Time(int hour)             //構造函數重載
	{
		hour_ =hour;
		minute_ = 0;
		second_ = 0;
		cout<<"Init"<<" "<<hour_<<endl;
	}
	Time(int hour, int minute):hour_(hour),minute_(minute),second_(0)  //初始化列表,對const成員必須使用初始化列表初始化
	{
		cout<<"Init"<<" "<<hour_<<endl;
	}
	Time(int hour, int minute, int second)  //構造函數的重載
	{
		hour_ = hour;
		minute_ = minute;
		second_ = second;
		cout<<"Init"<<" "<<hour_<<endl;
	}

	~Time()
	{
		cout<<"destoryed"<<" "<<hour_<<endl;
	}

private:
	int hour_;
	int minute_;
	int second_;
};

Time T4(30);    //Init 30 ,先於main函數

int main()
{
	cout<<"begin main"<<endl;
	Time t;    //Init 0說明構造函數是自動調用的
	Time t5(); //error不是創建對象的方式 雖然不報錯,但是這句是不調用構造函數的,這句的意思是聲明瞭一個普通函t5,返回值類型爲Time
	Time t1(12,12,12);         //Init 12

	Time *t2 = new Time(10);    //Init 10調用構造函數,()是傳參
	Time *t3 = new Time[3];    //定義一個包含三個Time類的數組 【】是數組元素個數

	//Time a[3] = {12,12,12};  //容易引起歧義,最好不要這樣定義
	//t.Time();     //構造函數不能顯示的調用,且每個對象只能調用一次構造函數
	delete t2;
	delete[] t3;
	cout<<"main end"<<endl;
	return 0;
}


程序運行結果見下圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章