您好,登錄后才能下訂單哦!
類與對(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)。
免責(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)容。