C++之淺談類與對象

類與對象是C++語言的一個特色,類是對象的抽象,對象是類的實例。
ide

類是抽象的須要佔用內存,而對象時實例化的佔用內存。函數

下面舉個例子:spa

class Time  //定義類
{
	int hour;   //定義數據成員
	int min;    //定義數據成員
	int sec;    //定義數據成員
};
Time t;

看着這個結構是否是有點眼熟呢,跟C語言中學過的struct的應用很相似,可是二者之間仍是有區別的:在struct中若沒有特別聲明,結構體的成員都是public公有成員;而class默認是private私有成員。調試

類中出了數據成員以外通常還有它的成員函數,說到成員函數咱們最早想到的是構造函數,構造函數的存在就是爲了讓咱們初始化對象(固然也能夠cout<<一些語句,方便咱們調試)。對象

說到初始化,以前在C語言中咱們見過的初始化是這樣的:內存

int i = 0;

可是若是在C++裏這樣初始化對象,那就是萬萬不行的啦
ci

class Time
{
	hour = 0;   //錯誤的初始化
	min = 0;     //錯誤的初始化
	sec = 0;     //錯誤的初始化
};

因此必定要運用咱們剛纔提到的構造函數。編譯器

構造函數的函數名與類名相同,這是必須的,必須的,必須的(重要的事情說三遍),它沒有返回值,也沒有任何類型,它的功能是用戶本身定義的,可是卻不能被用戶顯式調用,若是用戶本身沒有定義構造函數,那麼編譯器會自動生成一個構造函數,但生成的這個構造函數並無實際的做用,它的函數體是空的。it

class Time  //定義類
{
public:
	Time()   //定義構造函數,函數名與類名相同
	{
		hour = 0;   //利用構造函數來對數據成員進行初始化
		min = 0;    //利用構造函數來對數據成員進行初始化
		sec = 0;    //利用構造函數來對數據成員進行初始化
	}

	void Set_Time(void);  //函數聲明
	void Show_Time(void); // 函數聲明

private:
	int hour;   //定義數據成員
	int min;    //定義數據成員
	int sec;    //定義數據成員
};
void Time:: Set_Time(void)  //定義成員函數的定義,設置時間
{
	cin >> hour;
	cin >> min;
	cin >> sec;
}
void Time::Show_Time(void)// 成員函數的定義,顯示時間
{
	cout << hour << ":" << min << ":" << sec << endl;
}
Time t;     //定義類的對象

構造函數的定義除了上述例子中的那樣無參的構造函數以外,還有帶有參數的構造函數,它的通常格式爲:
編譯

構造函數名(類型名1,形參1,類型2,形參2 ...)

上面的例子可改寫爲

Time(int, int, int); //有參數的構造函數
//在類外定義構造函數
Time::Time(int h, int m, int s)
{
	hour = h;
	min = m;
	sec = s;
}

C++還提供了另一種初始化數據的方法,那就是參數化表,上面例子的初始化也能夠寫成這樣:

Time::Time(int h, int m, int s)
     :hour(h)
     , min  (m)
     , sec (s)
    {}

與構造函數相對應的就是析構函數了,析構函數的做用是在撤銷對象佔用的內存以前完成一些清理工做,但並非刪除對象。它的用法是在類名前面加一個取反符號「~」,函數中的內容可爲空。

上面例子的析構函數可寫爲

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

個類能夠有多個構造函數,可是隻能有一個析構函數。

調用構造函數和析構函數的順序至關於一個棧,先構造的後析構,後構造的先析構。

相關文章
相關標籤/搜索