溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++之淺談?lì)惻c對(duì)象

發(fā)布時(shí)間:2020-06-13 19:12:24 來源:網(wǎng)絡(luò) 閱讀:239 作者:Reject_UNFAIR 欄目:編程語言

類與對(duì)象是C++語言的一個(gè)特點(diǎn),類是對(duì)象的抽象,對(duì)象是類的實(shí)例。

類是抽象的需要占用內(nèi)存,而對(duì)象時(shí)實(shí)例化的占用內(nèi)存。

下面舉個(gè)例子:

class Time  //定義類
{
	int hour;   //定義數(shù)據(jù)成員
	int min;    //定義數(shù)據(jù)成員
	int sec;    //定義數(shù)據(jù)成員
};
Time t;

看著這個(gè)結(jié)構(gòu)是不是有點(diǎn)眼熟呢,跟C語言中學(xué)過的struct的應(yīng)用很類似,但是兩者之間還是有區(qū)別的:在struct中若沒有特別聲明,結(jié)構(gòu)體的成員都是public公有成員;而class默認(rèn)是private私有成員。

類中出了數(shù)據(jù)成員之外一般還有它的成員函數(shù),說到成員函數(shù)我們最先想到的是構(gòu)造函數(shù),構(gòu)造函數(shù)的存在就是為了讓我們初始化對(duì)象(當(dāng)然也可以cout<<一些語句,方便我們調(diào)試)。

說到初始化,之前在C語言中我們見過的初始化是這樣的:

int i = 0;

但是如果在C++里這樣初始化對(duì)象,那就是萬萬不行的啦

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

所以一定要運(yùn)用我們剛才提到的構(gòu)造函數(shù)。

構(gòu)造函數(shù)的函數(shù)名與類名相同,這是必須的,必須的,必須的(重要的事情說三遍),它沒有返回值,也沒有任何類型,它的功能是用戶自己定義的,但是卻不能被用戶顯式調(diào)用,如果用戶自己沒有定義構(gòu)造函數(shù),那么編譯器會(huì)自動(dòng)生成一個(gè)構(gòu)造函數(shù),但生成的這個(gè)構(gòu)造函數(shù)并沒有實(shí)際的作用,它的函數(shù)體是空的。

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

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

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

構(gòu)造函數(shù)的定義除了上述例子中的那樣無參的構(gòu)造函數(shù)之外,還有帶有參數(shù)的構(gòu)造函數(shù),它的一般格式為:

構(gòu)造函數(shù)名(類型名1,形參1,類型2,形參2 ...)

上面的例子可改寫為

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

C++還提供了另外一種初始化數(shù)據(jù)的方法,那就是參數(shù)化表,上面例子的初始化也可以寫成這樣:

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

與構(gòu)造函數(shù)相對(duì)應(yīng)的就是析構(gòu)函數(shù)了,析構(gòu)函數(shù)的作用是在撤銷對(duì)象占用的內(nèi)存之前完成一些清理工作,但并不是刪除對(duì)象。它的用法是在類名前面加一個(gè)取反符號(hào)“~”,函數(shù)中的內(nèi)容可為空。

上面例子的析構(gòu)函數(shù)可寫為

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

個(gè)類可以有多個(gè)構(gòu)造函數(shù),但是只能有一個(gè)析構(gòu)函數(shù)。

調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序相當(dāng)于一個(gè)棧,先構(gòu)造的后析構(gòu),后構(gòu)造的先析構(gòu)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI