版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、面向?qū)ο蟪绦蛟O計與實踐第九講 關于類和對象的進一步討論對象的初始化 class Timepublic: /聲明公有成員 int hour, minute, sec;Time t1 = 14, 56, 30; /將t1初始化為14:56:30創(chuàng)建對象時如不初始化,成員值不可預知類外初始化公有數(shù)據(jù)成員構(gòu)造函數(shù)私有數(shù)據(jù)成員構(gòu)造函數(shù)的特點特殊的成員函數(shù),無需顯式調(diào)用,在建立對象時自動執(zhí)行名字固定為類名,且沒有函數(shù)類型,不返回任何值可根據(jù)初始化要求重載構(gòu)造函數(shù)不提倡在其中加入與初始化無關的內(nèi)容如沒有定義構(gòu)造函數(shù),系統(tǒng)會自動生成一個構(gòu)造函數(shù),只是沒有參數(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); /設置時間void showTime(); /顯示時間private: int hour, minute, second;不帶參數(shù)的構(gòu)造函數(shù)int main( )Time t1; /建立對象t1,調(diào)用構(gòu)造函數(shù)t1.Time() t1.showTime(); /顯示t1的數(shù)據(jù)成員的值 Time t2; /建立對象t2,構(gòu)造函數(shù)t2.Time()t2.showTime(); /顯示t2的數(shù)據(jù)成
3、員的值return 0;該類的每一個對象都得到同一組初值帶參數(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); /設置時間void showTime(); /顯示時間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); /建立對象t1 t1.showTime(); /顯示t1的數(shù)據(jù)成員的值 Time t2; /建立對象t2t2.showTime(); /顯示t2的數(shù)據(jù)成員的值return 0;參數(shù)初始化表:在函數(shù)首部初始化數(shù)據(jù)定義出錯構(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); /設置時間void s
5、howTime(); /顯示時間private: int hour, minute, second;默認構(gòu)造函數(shù)帶默認參數(shù)的構(gòu)造函數(shù)class Timepublic:/帶默認參數(shù)的構(gòu)造函數(shù) Time(int h = 10, int m = 10, int s = 10) hour = h; minute = m; second = s; void showTime(); /顯示時間private: int hour, minute, second;默認構(gòu)造函數(shù)析構(gòu)函數(shù) 釋放對象空間之前完成一些清理工作特殊的成員函數(shù),無需顯式調(diào)用,在對象生命期結(jié)束釋放時自動執(zhí)行名字固定為類名前加“”符號,且沒有
6、函數(shù)類型,不返回任何值,也沒有函數(shù)參數(shù),不能被重載如沒有定義析構(gòu)函數(shù),系統(tǒng)會自動生成一個析構(gòu)函數(shù),只是函數(shù)體為空,不執(zhí)行任何操作析構(gòu)函數(shù)的作用并不是刪除對象析構(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; /通過指針訪問對象成員對象指針:指向運算符 -this 指針void main( )Time t1; t1.showTime(); Time t2; t2.showTime();t
7、1hmst2hmsShowTime()cout h m s;thisShowTime()cout h m s;成員函數(shù)都有的指向本類對象的特殊指針隱式調(diào)用共用數(shù)據(jù)的保護凡是只讀的數(shù)據(jù),都應定義為const常對象常成員變量常成員函數(shù)指向?qū)ο蟮某V羔樦赶虺ο蟮闹羔槍ο蟮某R贸ο髮ο蟮闹挡荒苄薷念惷?const 對象名(實參表列); const 類名 對象名(實參表列);const Time t1(10,15,36); /定義常對象t1t1.setTime(); /調(diào)用非常成員函數(shù),非法常對象只能調(diào)用常成員函數(shù)常成員函數(shù)不能修改對象中所有數(shù)據(jù)成員的值類型名 函數(shù)名(參數(shù)表列) const ;v
8、oid showTime() const;const Time t1(10,15,36); /定義常對象t1t1.showTime(); /常對象可以調(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ù)中用初始化表進行初始化關系小結(jié)類常成員變量常成員函數(shù)非常成員變量非常成員函數(shù)非常對象關系小結(jié)類常成員變量常成員函數(shù)非常成員變量非常成員函數(shù)常對象指向?qū)ο蟮某V羔樦羔樀?/p>
9、值不能改變,始終指向其初值類名* const 指針變量名;Time t1(10, 12, 15), t2; /定義對象Time* const p = &t1;/定義常指針p = &t2; /錯誤,指針p不能改變指向*p = t1; /正確,指針p指向的對象可以改變常指針所指向?qū)ο蟮闹悼梢愿淖冎赶虺ο蟮闹羔槻荒芡ㄟ^指針改變其所指向?qū)ο蟮闹礳onst 類名* 指針變量名; Time const t1(10,12,15); /定義常對象const Time* p = &t1; /定義常對象指針p-hour = 20; /錯誤,指向的對象值不能修改Time t2; p = &t2; /可以指向非常對
10、象p-hour = 20; /可以這樣嗎?t2.hour = 20; 形參為非常對象指針時實參不能為常對象指針對象的常引用不能通過引用改變對象的值const 類型名& 變量名 = 變量名2; Time t1(10, 12, 15); /定義對象const Time& t2 = t1; /定義常引用t2t2.hour = 20; /錯誤,常引用不能改變值t1.hour = 20; /正確,非常對象可以改變值常引用一般作為函數(shù)的形參關系小結(jié)非常對象常對象非常引用指向?qū)ο蟮某V羔樦赶虺ο蟮闹羔槼R胏onst小結(jié)類型形式含義常對象Time const t1;t1是常對象,其值不能改變常數(shù)據(jù)成員co
11、nst int hour; 不能修改hour的值常成員函數(shù)void Time:fun() constfun是不能修改本類的數(shù)據(jù)成員指向?qū)ο蟮某V羔楾ime* const p;p的指向不能改變指向常對象的指針const Time* p;不能通過p改變指向的對象的值對象的常引用const Time& t1 = t;不能通過t1改變對象的值對象的動態(tài)建立和釋放用new和delete運算符動態(tài)建立或撤銷對象Time* pt = new Time(); /動態(tài)創(chuàng)建對象delete pt; /釋放對象,調(diào)用析構(gòu)函數(shù)Time* pt = new Time(); Time t1;pt = &t1; /修改了p
12、t的指向?qū)ο骴elete pt; /釋放了對象t1Time* const pt = new Time();/建議賦值給常指針對象的賦值和復制賦值:將一個對象的值賦給另一同類對象復制:根據(jù)已有的對象創(chuàng)建新的對象Time t1(10, 12, 15), t2; /定義對象t2 = t1; /對象賦值Time t1(10, 12, 15);Time t2 = t1; /用t1初始化t2Time t3(t1); /根據(jù)t1復制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;必須是本類對象如未定義,系統(tǒng)自動創(chuàng)建默認拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)的調(diào)用定義對象Time t1;Time t2(t1);實參是對象Time t1;func(t1);返回值是對象Time t1;t1 = func();自動調(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ù)成員實現(xiàn)同類對象間的數(shù)據(jù)共享static 類型名 變量名; 靜態(tài)數(shù)據(jù)成員void main() Time t1; cout t1.hour endl; /通過對象名引用靜態(tài)數(shù)據(jù)成員 cout Time:hour endl; /通
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冷鏈物流設施建設合同
- 大型酒店橋梁工程建橋合同
- 非營利組織合同歸檔辦法
- 魚塘養(yǎng)殖企業(yè)產(chǎn)品追溯承包合同
- 藝術(shù)館裝修設計施工合同
- 軟件開發(fā)合同規(guī)范
- 歷史兼職教師招聘協(xié)議樣本
- 工業(yè)倉房租賃合同
- 塑膠保溫施工合同
- 衢州市親子活動中心租賃合同
- 大學生安全教育智慧樹知到答案章節(jié)測試2023年中國海洋大學
- 學校安全教育珍愛生命-拒絕打架斗毆課件
- YY/T 0698.7-2009最終滅菌醫(yī)療器械包裝材料第7部分:環(huán)氧乙烷或輻射滅菌無菌屏障系統(tǒng)生產(chǎn)用可密封涂膠紙要求和試驗方法
- GB/T 40276-2021柔巾
- GB/T 3750-2008卡套式鉸接管接頭
- GB/T 20944.3-2008紡織品抗菌性能的評價第3部分:振蕩法
- 自然辯證法概論(新)
- 老舊小區(qū)維修改造監(jiān)理服務方案2
- 《政府會計》課后習題答案(第4-18章)
- 中小學音體美器材配備標準
- 重慶開州區(qū)2021-2022學年度(上冊)五年級期末質(zhì)量監(jiān)測卷語文試卷
評論
0/150
提交評論