![《Visual C++程序設(shè)計(jì)及實(shí)踐》課件第4章 C++面向?qū)ο骭第1頁(yè)](http://file4.renrendoc.com/view7/M02/34/21/wKhkGWbVlkCALU7oAACl0zIMie0615.jpg)
![《Visual C++程序設(shè)計(jì)及實(shí)踐》課件第4章 C++面向?qū)ο骭第2頁(yè)](http://file4.renrendoc.com/view7/M02/34/21/wKhkGWbVlkCALU7oAACl0zIMie06152.jpg)
![《Visual C++程序設(shè)計(jì)及實(shí)踐》課件第4章 C++面向?qū)ο骭第3頁(yè)](http://file4.renrendoc.com/view7/M02/34/21/wKhkGWbVlkCALU7oAACl0zIMie06153.jpg)
![《Visual C++程序設(shè)計(jì)及實(shí)踐》課件第4章 C++面向?qū)ο骭第4頁(yè)](http://file4.renrendoc.com/view7/M02/34/21/wKhkGWbVlkCALU7oAACl0zIMie06154.jpg)
![《Visual C++程序設(shè)計(jì)及實(shí)踐》課件第4章 C++面向?qū)ο骭第5頁(yè)](http://file4.renrendoc.com/view7/M02/34/21/wKhkGWbVlkCALU7oAACl0zIMie06155.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
-1-本章目標(biāo)理解面向?qū)ο缶幊趟枷肜斫饫^承和多態(tài)的概念掌握類和對(duì)象的關(guān)系掌握靜態(tài)變量、靜態(tài)成員函數(shù)的使用掌握繼承的實(shí)現(xiàn)和使用掌握多態(tài)的實(shí)現(xiàn)和使用-2-類與對(duì)象—面向?qū)ο蟮母拍蠲嫦驅(qū)ο缶幊痰慕M織方式圍繞“對(duì)象”,而不是圍繞“行為”;圍繞數(shù)據(jù),而非邏輯。面向?qū)ο蟪绦虿捎玫挠^點(diǎn)是“一切都是對(duì)象”。面向?qū)ο蠓治觯∣OA)就是以“類”的概念去認(rèn)識(shí)問(wèn)題、分析問(wèn)題。面向?qū)ο笤O(shè)計(jì)(OOD)是在OOA的基礎(chǔ)上進(jìn)行數(shù)據(jù)建模,從而建立所要操作的對(duì)象以及它們之間的聯(lián)系-3-類與對(duì)象—面向?qū)ο蟮母拍蠲嫦驅(qū)ο蟮娜筇卣鳎悍庋b
對(duì)象的屬性(狀態(tài))和方法(行為)結(jié)合在一起,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。繼承
通過(guò)吸收現(xiàn)有類的數(shù)據(jù)(屬性)和方法,并增加新功能或修改現(xiàn)有功能來(lái)構(gòu)建新類。多態(tài)
在父類中定義的屬性或方法被子類繼承之后,可以具有不同的表現(xiàn)行為。-4-類與對(duì)象—類的定義C++中定義類的語(yǔ)法格式如下:classclass_name{access: constructor_declarations; attribute_declarations;
method_declarations;};class是C++語(yǔ)言關(guān)鍵字,表明這是一個(gè)類的定義;class_name是類的名字;access具體可取public、protected、private或缺?。籧onstructor_declarations是類的構(gòu)造函數(shù);attribute_declarations是屬性,一般稱為類的數(shù)據(jù)成員;method_declarations是方法,一般稱為類的成員函數(shù)。-5-類與對(duì)象—構(gòu)造函數(shù)和類的實(shí)例化與一般的函數(shù)相比,構(gòu)造函數(shù)有兩點(diǎn)不同:構(gòu)造函數(shù)具有和它所在的類完全一樣的名字構(gòu)造函數(shù)沒(méi)有返回類型//在類的定義文件中,構(gòu)造函數(shù)的聲明格式如下:classclass_name{public:class_name([argu_list]);......};-6-類與對(duì)象—構(gòu)造函數(shù)和類的實(shí)例化創(chuàng)建對(duì)象有兩種方法:棧對(duì)象和堆對(duì)象://創(chuàng)建棧對(duì)象的方法如下:class_nameobj;//類定義沒(méi)有提供構(gòu)造函數(shù),或者要調(diào)用缺省構(gòu)造函數(shù)class_nameobj(argu_list);//調(diào)用類的帶參數(shù)的構(gòu)造函數(shù)//創(chuàng)建堆對(duì)象的方法如下://類定義沒(méi)有提供構(gòu)造函數(shù),或者要調(diào)用缺省構(gòu)造函數(shù)class_name*pobj=newclass_name;//調(diào)用類的帶參數(shù)的構(gòu)造函數(shù)class_name*pobj=newclass_name(argu_list);-7-類與對(duì)象—析構(gòu)函數(shù)析構(gòu)函數(shù)也是類中的特殊成員函數(shù),要在前面加上一個(gè)波浪號(hào)“~”。一個(gè)類中只能有一個(gè)析構(gòu)函數(shù)。析構(gòu)函數(shù)執(zhí)行與構(gòu)造函數(shù)相反的操作,通常用于釋放分配給對(duì)象的存儲(chǔ)空間。當(dāng)程序超出類對(duì)象的作用域時(shí),或者當(dāng)對(duì)一個(gè)類指針使用運(yùn)算符delete時(shí),系統(tǒng)將自動(dòng)調(diào)用析構(gòu)函數(shù)。//類的定義文件中,析構(gòu)函數(shù)聲明的格式如下:classclass_name{public: ~class_name(); ......};-8-類與對(duì)象—成員函數(shù)成員函數(shù)(方法)是類行為的體現(xiàn),其他對(duì)象可以根據(jù)類的方法對(duì)類進(jìn)行訪問(wèn)。多數(shù)情況下分布在兩個(gè)文件中(.h和.cpp)。//.hclassclass_name{[access]: <return_type>methodName([<argu_list>]);};//.cpp<return_type>class_name::methodName([<argu_list>]){ ......//具體實(shí)現(xiàn)}-9-類與對(duì)象—內(nèi)聯(lián)成員函數(shù)//類定義文件classEmployee{public: ...... //類成員函數(shù)聲明,inline關(guān)鍵字可以省略
inlinevoidSetAge(intnAge); ......}; //類實(shí)現(xiàn)文件,如果成員函數(shù)聲明時(shí)省略了inline關(guān)鍵字,這里就不能省略inlinevoidEmployee::SetAge(intnAge){ m_nAge=nAge;}類與對(duì)象—靜態(tài)類成員-10-與類相關(guān)的變量或函數(shù)稱為靜態(tài)成員變量或靜態(tài)成員函數(shù)://Account.h文件,定義一個(gè)銀行賬戶類classCAccount{public: ...... //靜態(tài)成員函數(shù),增加利率
staticvoidAddInterresRate(floatn); //靜態(tài)成員函數(shù),獲取利率值
staticfloatGetInterestRate() { returnm_fInterestRate; }private: charm_sName;//賬戶姓名
//利率,靜態(tài)成員,多個(gè)所有賬戶實(shí)例都要共享同一利率值
staticfloatm_fInterestRate;
......}//靜態(tài)類的數(shù)據(jù)成員,要在類定義體外單獨(dú)實(shí)例化。//Account.cpp文件floatCAccount::m_nInterestRate=0.022;
-11-類與對(duì)象—this指針this指針指向該成員函數(shù)所屬類的對(duì)象this是一種隱含指針,它隱含于每個(gè)類的非靜態(tài)成員函數(shù)之中。每個(gè)非靜態(tài)成員函數(shù)都有一個(gè)this指針變量-12-類繼承—繼承繼承是面向?qū)ο缶幊痰囊豁?xiàng)核心技術(shù),是面向?qū)ο缶幊碳夹g(shù)的一塊基石。繼承允許創(chuàng)建分等級(jí)層次的類。運(yùn)用繼承,能夠創(chuàng)建一個(gè)通用類,通過(guò)繼承增加、修改或替換給定類中的方法對(duì)這個(gè)類進(jìn)行擴(kuò)充,以適應(yīng)不同的要求。//定義派生類的一般格式如下:classclass_name:accessparent_name{ ......//省略};-13-類繼承—派生類對(duì)象的構(gòu)造在派生類中調(diào)用基類構(gòu)造函數(shù)有下列幾種情況:如果基類只有無(wú)參的構(gòu)造函數(shù)(可能是缺省的,也可能是自定義的),則派生類會(huì)默認(rèn)調(diào)用基類的這個(gè)無(wú)參構(gòu)造函數(shù)。如果基類同時(shí)具有無(wú)參和有參的構(gòu)造函數(shù),則派生類中可以通過(guò)參數(shù)列表明確指定調(diào)用基類的哪一個(gè)構(gòu)造函數(shù),如果未指定,則會(huì)默認(rèn)調(diào)用基類的無(wú)參構(gòu)造函數(shù)。如果基類只有有參的構(gòu)造函數(shù),則派生類中必須通過(guò)參數(shù)列表明確指定調(diào)用基類的哪一個(gè)構(gòu)造函數(shù)。-14-類繼承—派生類對(duì)象的析構(gòu)派生類對(duì)象在離開作用域(棧對(duì)象)或者被刪除(堆對(duì)象)時(shí),派生類的析構(gòu)函數(shù)先被調(diào)用,然后是基類的析構(gòu)函數(shù)被調(diào)用。-15-虛函數(shù)和多態(tài)多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特性,是一種實(shí)現(xiàn)“一種接口,多種方法”的技術(shù)。在C++中有兩種多態(tài):編譯時(shí)多態(tài),函數(shù)重載是編譯時(shí)多態(tài)運(yùn)行時(shí)多態(tài),虛函數(shù)是運(yùn)行時(shí)多態(tài)。-16-虛函數(shù)和多態(tài)—虛函數(shù)虛函數(shù)是實(shí)現(xiàn)多態(tài)的重要手段,通過(guò)在基類中的某個(gè)函數(shù)前面添加virtual關(guān)鍵字,即可聲明這個(gè)函數(shù)為虛函數(shù),從而可以被派生類重新定義。在派生類中重定義父類中的虛函數(shù),也叫重寫或覆蓋......classCBase{public: virtualvoidfoo1()//虛函數(shù) { cout<<"CBase::foo1()"<<endl; } voidfoo2()//非虛函數(shù) { cout<<"CBase::foo2()"<<endl; } virtualvoidfoo3()//虛函數(shù) {cout<<"CBase::foo3()"<<endl; }};-17-虛函數(shù)和多態(tài)—虛析構(gòu)函數(shù)虛析構(gòu)函數(shù)解決了,“delete運(yùn)算符用于指向派生類對(duì)象的基類指針,可以恰當(dāng)?shù)恼{(diào)用合適的析構(gòu)函數(shù)”。......intmain(intargc,char*argv[]){ cout<<"直接通過(guò)類對(duì)象調(diào)用,如果是虛函數(shù)也不具有多態(tài)性"<<endl; CBaseobj; ...... CBase*pObj=newCDerived; pObj->foo1(); pObj->foo2();
cout<<"雖然是虛函數(shù),但沒(méi)有被派生類重寫,將不具有多態(tài)性"<<endl; pObj->foo3();
deletepObj;//此處派生類和父類析構(gòu)函數(shù)被調(diào)用
return0;//離開作用域后obj對(duì)象的CBase類的析構(gòu)函數(shù)被調(diào)用}-18-虛函數(shù)和多態(tài)—純虛函數(shù)和抽象基類純虛函數(shù)是指沒(méi)有實(shí)現(xiàn)的函數(shù),是一種特殊的虛函數(shù)。當(dāng)在基類中無(wú)法為虛函數(shù)編寫有意義的實(shí)現(xiàn)時(shí),可以將虛函數(shù)聲明為純虛函數(shù),其實(shí)現(xiàn)留待派生類完成。//聲明純虛函數(shù)語(yǔ)法如下:classclass_name{access:virtualreturn_typefunction([<arg_list>])=0;......};-19-小結(jié)類是具有相同屬性和方法的對(duì)象的抽象定義對(duì)象是類的一個(gè)實(shí)例,擁有類定義的屬性和方法C++類的實(shí)例化方法有兩種:棧對(duì)象和堆對(duì)象構(gòu)造函數(shù)在類實(shí)例化時(shí)被調(diào)用析構(gòu)函數(shù)在對(duì)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年巴音郭楞道路運(yùn)輸從業(yè)資格證考試內(nèi)容是什么
- 小學(xué)三年級(jí)100道口算題
- 2025年欽州貨運(yùn)上崗證模擬考試題
- 2025年荷澤貨運(yùn)從業(yè)資格證模擬考試駕考
- 華東師大版七年級(jí)數(shù)學(xué)上冊(cè)《第3章整式的加減3.1列代數(shù)式3.1.3列代數(shù)式 》聽(tīng)評(píng)課記錄
- 湘教版數(shù)學(xué)八年級(jí)下冊(cè)《2.2.1平行四邊形的邊、角性質(zhì)》聽(tīng)評(píng)課記錄
- 建筑項(xiàng)目經(jīng)理工作總結(jié)
- 初中理科教研組工作計(jì)劃
- 新學(xué)校校辦室工作計(jì)劃
- 平面設(shè)計(jì)師工作計(jì)劃范文欣賞
- 《反家庭暴力》課件
- 【物理】《跨學(xué)科實(shí)踐:制作簡(jiǎn)易桿秤》(教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教版(2024)初中物理八年級(jí)下冊(cè)
- 新蘇教版一年級(jí)數(shù)學(xué)下冊(cè)第六單元《簡(jiǎn)單的數(shù)量關(guān)系(一)》教案(共2課時(shí))
- GA/T 2146-2024法庭科學(xué)涉火案件物證檢驗(yàn)移動(dòng)實(shí)驗(yàn)室建設(shè)通用要求
- 2024-2025學(xué)年成都市石室聯(lián)中七年級(jí)上英語(yǔ)期末考試題(含答案)
- 2025年度服務(wù)外包合同:銀行呼叫中心服務(wù)外包協(xié)議3篇
- 【課件】跨學(xué)科實(shí)踐制作微型密度計(jì)++課件人教版物理八年級(jí)下冊(cè)
- 北師大版五年級(jí)數(shù)學(xué)下冊(cè)第4課時(shí)體積單位的換算課件
- Module 2 Unit 2 I dont like ginger. (說(shuō)課稿)-2024-2025學(xué)年外研版(一起)英語(yǔ)二年級(jí)上冊(cè)
- 2025年新高考語(yǔ)文模擬考試試卷(五) (含答案解析)
- 教育部《中小學(xué)校園食品安全和膳食經(jīng)費(fèi)管理工作指引》專題培訓(xùn)
評(píng)論
0/150
提交評(píng)論