版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《水環(huán)境調(diào)查方法》課件
- 2020年安徽省中考英語(yǔ)試卷及答案解析
- 小學(xué)一年級(jí)20以內(nèi)加減法試題口算速算練習(xí)題
- 《護(hù)士禮儀行為規(guī)范》課件
- 《物業(yè)服務(wù)內(nèi)涵》課件
- 銀銅合金焊接知識(shí)點(diǎn)
- 地產(chǎn)建筑行業(yè)技術(shù)工作總結(jié)
- 會(huì)計(jì)行業(yè)會(huì)計(jì)人員培訓(xùn)總結(jié)
- 精神科護(hù)士的綜合總結(jié)
- 零售業(yè)務(wù)員工作總結(jié)
- 昆明市公交集團(tuán)車載視頻監(jiān)控平臺(tái)升級(jí)方案20191025
- 一流課程申報(bào)
- 高中體育特長(zhǎng)生名校報(bào)考路徑分析課件
- 主要建筑材料碳排放因子查詢表
- 建筑施工室內(nèi)裝飾設(shè)計(jì)施工圖講解
- 冠寓運(yùn)營(yíng)管理手冊(cè)
- 耳部銅砭刮痧技術(shù)評(píng)分標(biāo)準(zhǔn)
- 玻璃幕墻施工方案幕墻
- 抗精神疾病藥物與麻醉課件
- 數(shù)據(jù)庫(kù)原理與應(yīng)用課后習(xí)題答案李春葆 編
- 因公出國(guó)教育談話記錄
評(píng)論
0/150
提交評(píng)論