面向?qū)ο蟪绦蛟O(shè)計(jì)與實(shí)踐:第九講 關(guān)于類和對(duì)象的進(jìn)一步討論_第1頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)與實(shí)踐:第九講 關(guān)于類和對(duì)象的進(jìn)一步討論_第2頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)與實(shí)踐:第九講 關(guān)于類和對(duì)象的進(jìn)一步討論_第3頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)與實(shí)踐:第九講 關(guān)于類和對(duì)象的進(jìn)一步討論_第4頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)與實(shí)踐:第九講 關(guān)于類和對(duì)象的進(jìn)一步討論_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、面向?qū)ο蟪绦蛟O(shè)計(jì)與實(shí)踐第九講 關(guān)于類和對(duì)象的進(jìn)一步討論對(duì)象的初始化 class Timepublic: /聲明公有成員 int hour, minute, sec;Time t1 = 14, 56, 30; /將t1初始化為14:56:30創(chuàng)建對(duì)象時(shí)如不初始化,成員值不可預(yù)知類外初始化公有數(shù)據(jù)成員構(gòu)造函數(shù)私有數(shù)據(jù)成員構(gòu)造函數(shù)的特點(diǎn)特殊的成員函數(shù),無(wú)需顯式調(diào)用,在建立對(duì)象時(shí)自動(dòng)執(zhí)行名字固定為類名,且沒(méi)有函數(shù)類型,不返回任何值可根據(jù)初始化要求重載構(gòu)造函數(shù)不提倡在其中加入與初始化無(wú)關(guān)的內(nèi)容如沒(méi)有定義構(gòu)造函數(shù),系統(tǒng)會(huì)自動(dòng)生成一個(gè)構(gòu)造函數(shù),只是沒(méi)有參數(shù),函數(shù)體為空,不執(zhí)行初始化操作不帶參數(shù)的構(gòu)造函數(shù)cl

2、ass Timepublic:Time() /定義構(gòu)造成員函數(shù),函數(shù)名與類名相同 hour = minute = second = 0; void setTime(int h, int m, int s); /設(shè)置時(shí)間void showTime(); /顯示時(shí)間private: int hour, minute, second;不帶參數(shù)的構(gòu)造函數(shù)int main( )Time t1; /建立對(duì)象t1,調(diào)用構(gòu)造函數(shù)t1.Time() t1.showTime(); /顯示t1的數(shù)據(jù)成員的值 Time t2; /建立對(duì)象t2,構(gòu)造函數(shù)t2.Time()t2.showTime(); /顯示t2的數(shù)據(jù)成

3、員的值return 0;該類的每一個(gè)對(duì)象都得到同一組初值帶參數(shù)的構(gòu)造函數(shù)class Timepublic:Time(int h, int m, int s) /帶參數(shù)的構(gòu)造函數(shù) hour = h; minute = m; second = s; void setTime(int h, int m, int s); /設(shè)置時(shí)間void showTime(); /顯示時(shí)間private: int hour, minute, second;帶參數(shù)的構(gòu)造函數(shù)Time(int h, int m, int s):hour(h),minute(m),second(s)int main( )Time t1(1

4、7, 25, 33); /建立對(duì)象t1 t1.showTime(); /顯示t1的數(shù)據(jù)成員的值 Time t2; /建立對(duì)象t2t2.showTime(); /顯示t2的數(shù)據(jù)成員的值return 0;參數(shù)初始化表:在函數(shù)首部初始化數(shù)據(jù)定義出錯(cuò)構(gòu)造函數(shù)的重載class Timepublic:Time(int h, int m, int s) /構(gòu)造函數(shù) hour = h; minute = m; second = s; Time() /重載構(gòu)造函數(shù) hour = minute = second = 0; void setTime(int h, int m, int s); /設(shè)置時(shí)間void s

5、howTime(); /顯示時(shí)間private: int hour, minute, second;默認(rèn)構(gòu)造函數(shù)帶默認(rèn)參數(shù)的構(gòu)造函數(shù)class Timepublic:/帶默認(rèn)參數(shù)的構(gòu)造函數(shù) Time(int h = 10, int m = 10, int s = 10) hour = h; minute = m; second = s; void showTime(); /顯示時(shí)間private: int hour, minute, second;默認(rèn)構(gòu)造函數(shù)析構(gòu)函數(shù) 釋放對(duì)象空間之前完成一些清理工作特殊的成員函數(shù),無(wú)需顯式調(diào)用,在對(duì)象生命期結(jié)束釋放時(shí)自動(dòng)執(zhí)行名字固定為類名前加“”符號(hào),且沒(méi)有

6、函數(shù)類型,不返回任何值,也沒(méi)有函數(shù)參數(shù),不能被重載如沒(méi)有定義析構(gòu)函數(shù),系統(tǒng)會(huì)自動(dòng)生成一個(gè)析構(gòu)函數(shù),只是函數(shù)體為空,不執(zhí)行任何操作析構(gòu)函數(shù)的作用并不是刪除對(duì)象析構(gòu)函數(shù)示例class Demo /聲明Demo類public:Demo(int id) : ID(id) /定義構(gòu)造函數(shù) cout Construct ID endl; Demo() /定義析構(gòu)函數(shù) cout Deconstruct ID hour = 20; /通過(guò)指針訪問(wèn)對(duì)象成員對(duì)象指針:指向運(yùn)算符 -this 指針void main( )Time t1; t1.showTime(); Time t2; t2.showTime();t

7、1hmst2hmsShowTime()cout h m s;thisShowTime()cout h m s;成員函數(shù)都有的指向本類對(duì)象的特殊指針隱式調(diào)用共用數(shù)據(jù)的保護(hù)凡是只讀的數(shù)據(jù),都應(yīng)定義為const常對(duì)象常成員變量常成員函數(shù)指向?qū)ο蟮某V羔樦赶虺?duì)象的指針對(duì)象的常引用常對(duì)象對(duì)象的值不能修改類名 const 對(duì)象名(實(shí)參表列); const 類名 對(duì)象名(實(shí)參表列);const Time t1(10,15,36); /定義常對(duì)象t1t1.setTime(); /調(diào)用非常成員函數(shù),非法常對(duì)象只能調(diào)用常成員函數(shù)常成員函數(shù)不能修改對(duì)象中所有數(shù)據(jù)成員的值類型名 函數(shù)名(參數(shù)表列) const ;v

8、oid showTime() const;const Time t1(10,15,36); /定義常對(duì)象t1t1.showTime(); /常對(duì)象可以調(diào)用常成員函數(shù)常成員函數(shù)不能調(diào)用非常成員函數(shù)常成員變量數(shù)據(jù)成員的值不能修改class Time private: const int hour; int const minute;Time:Time(int h, int m) : hour(h), minute(m) 只能在構(gòu)造函數(shù)中用初始化表進(jìn)行初始化關(guān)系小結(jié)類常成員變量常成員函數(shù)非常成員變量非常成員函數(shù)非常對(duì)象關(guān)系小結(jié)類常成員變量常成員函數(shù)非常成員變量非常成員函數(shù)常對(duì)象指向?qū)ο蟮某V羔樦羔樀?/p>

9、值不能改變,始終指向其初值類名* const 指針變量名;Time t1(10, 12, 15), t2; /定義對(duì)象Time* const p = &t1;/定義常指針p = &t2; /錯(cuò)誤,指針p不能改變指向*p = t1; /正確,指針p指向的對(duì)象可以改變常指針?biāo)赶驅(qū)ο蟮闹悼梢愿淖冎赶虺?duì)象的指針不能通過(guò)指針改變其所指向?qū)ο蟮闹礳onst 類名* 指針變量名; Time const t1(10,12,15); /定義常對(duì)象const Time* p = &t1; /定義常對(duì)象指針p-hour = 20; /錯(cuò)誤,指向的對(duì)象值不能修改Time t2; p = &t2; /可以指向非常對(duì)

10、象p-hour = 20; /可以這樣嗎?t2.hour = 20; 形參為非常對(duì)象指針時(shí)實(shí)參不能為常對(duì)象指針對(duì)象的常引用不能通過(guò)引用改變對(duì)象的值const 類型名& 變量名 = 變量名2; Time t1(10, 12, 15); /定義對(duì)象const Time& t2 = t1; /定義常引用t2t2.hour = 20; /錯(cuò)誤,常引用不能改變值t1.hour = 20; /正確,非常對(duì)象可以改變值常引用一般作為函數(shù)的形參關(guān)系小結(jié)非常對(duì)象常對(duì)象非常引用指向?qū)ο蟮某V羔樦赶虺?duì)象的指針常引用const小結(jié)類型形式含義常對(duì)象Time const t1;t1是常對(duì)象,其值不能改變常數(shù)據(jù)成員co

11、nst int hour; 不能修改hour的值常成員函數(shù)void Time:fun() constfun是不能修改本類的數(shù)據(jù)成員指向?qū)ο蟮某V羔楾ime* const p;p的指向不能改變指向常對(duì)象的指針const Time* p;不能通過(guò)p改變指向的對(duì)象的值對(duì)象的常引用const Time& t1 = t;不能通過(guò)t1改變對(duì)象的值對(duì)象的動(dòng)態(tài)建立和釋放用new和delete運(yùn)算符動(dòng)態(tài)建立或撤銷對(duì)象Time* pt = new Time(); /動(dòng)態(tài)創(chuàng)建對(duì)象delete pt; /釋放對(duì)象,調(diào)用析構(gòu)函數(shù)Time* pt = new Time(); Time t1;pt = &t1; /修改了p

12、t的指向?qū)ο骴elete pt; /釋放了對(duì)象t1Time* const pt = new Time();/建議賦值給常指針對(duì)象的賦值和復(fù)制賦值:將一個(gè)對(duì)象的值賦給另一同類對(duì)象復(fù)制:根據(jù)已有的對(duì)象創(chuàng)建新的對(duì)象Time t1(10, 12, 15), t2; /定義對(duì)象t2 = t1; /對(duì)象賦值Time t1(10, 12, 15);Time t2 = t1; /用t1初始化t2Time t3(t1); /根據(jù)t1復(fù)制t3拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)的一般形式類型名(const 本類型名& 變量名); Time:Time(const Time& t) hour = t.hour; mi

13、nute = t. minute; second = t.second;必須是本類對(duì)象如未定義,系統(tǒng)自動(dòng)創(chuàng)建默認(rèn)拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)的調(diào)用定義對(duì)象Time t1;Time t2(t1);實(shí)參是對(duì)象Time t1;func(t1);返回值是對(duì)象Time t1;t1 = func();自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)靜態(tài)數(shù)據(jù)成員class Timepublic: static int hour; /公有靜態(tài)數(shù)據(jù)成員 int minute, second;int Time:hour = 10; /必須類外初始化靜態(tài)數(shù)據(jù)成員實(shí)現(xiàn)同類對(duì)象間的數(shù)據(jù)共享static 類型名 變量名; 靜態(tài)數(shù)據(jù)成員void main() Time t1; cout t1.hour endl; /通過(guò)對(duì)象名引用靜態(tài)數(shù)據(jù)成員 cout Time:hour endl; /通

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論