




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、參考:參考:C+C+程序設(shè)計教程程序設(shè)計教程 p56p64p56p64第五講第五講 類和對象(一)類和對象(一)C+C+類與對象概述類與對象概述類類q類的聲明類的聲明q類的定義類的定義對象對象q對象的聲明與成員訪問對象的聲明與成員訪問q實例化對象實例化對象類和對象的簡單應(yīng)用舉例類和對象的簡單應(yīng)用舉例C+C+對象對象:現(xiàn)實世界中某個具體的:現(xiàn)實世界中某個具體的物理實體物理實體在計算在計算機邏輯中的映射和體現(xiàn)。機邏輯中的映射和體現(xiàn)?,F(xiàn)實中的現(xiàn)實中的對象對象都具有屬性和行為。都具有屬性和行為。C+C+類類:是一種抽象的數(shù)據(jù)類型,是同種對象的:是一種抽象的數(shù)據(jù)類型,是同種對象的集合與抽象,是具有共同行
2、為和屬性的若干集合與抽象,是具有共同行為和屬性的若干對象的統(tǒng)一描述體對象的統(tǒng)一描述體C+C+類與對象概述類與對象概述類類q類的聲明類的聲明q類的定義類的定義對象對象q對象的聲明與成員訪問對象的聲明與成員訪問q實例化對象實例化對象類和對象的簡單應(yīng)用舉例類和對象的簡單應(yīng)用舉例C+C+ 狗類狗類行為行為 吠叫吠叫屬性屬性 名字名字 品種品種 年齡年齡 顏色顏色class Dogpublic: void yelp();private: string name; string breed; int age; string color;映射映射抽象抽象C+C+class Dog /類名類名public:
3、void yelp();/成員函數(shù)成員函數(shù)private: string name; string breed; int age; string color;數(shù)據(jù)成員數(shù)據(jù)成員a_1C+C+類的聲明類的聲明class public: protected: private: ;/分號!C+C+class TDatepublic: void setDate( const int aYear, const int aMonth, const int aDay ); bool isLeapYear() const; void display() const;private: int m_iYear; i
4、nt m_iMonth; int m_iDay;a_2C+C+類名,類名,class是聲名類的關(guān)鍵字,是聲名類的關(guān)鍵字,是標(biāo)示符,是標(biāo)示符,通常以通常以T或者或者C開頭,以示與對象,函數(shù),變量區(qū)別開頭,以示與對象,函數(shù),變量區(qū)別類的成員,包含類的成員,包含數(shù)據(jù)成員數(shù)據(jù)成員和和成員函數(shù)成員函數(shù)兩部分兩部分訪問權(quán)限修飾符訪問權(quán)限修飾符,包括公有的,包括公有的(public),私有的,私有的(private)和保護的和保護的(protected)三類。三類。u公有的成員用public來說明,一般為一些成員函數(shù),它是提供給用戶的接口功能。u私有的成員用private來說明,私有部分一般為類的成員變量,
5、用來描述對象的屬性C+C+訪問權(quán)限修飾符類體內(nèi)類體外privateprotectedpublicC+C+類與對象概述類與對象概述類類q類的聲明類的聲明q類的定義類的定義對象對象q對象的聲明與成員訪問對象的聲明與成員訪問q實例化對象實例化對象類和對象的簡單應(yīng)用舉例類和對象的簡單應(yīng)用舉例C+C+類的定義類的定義類體內(nèi)定義類體內(nèi)定義類體外定義類體外定義類的定義即給出成員函數(shù)具體的功能實現(xiàn)類的定義即給出成員函數(shù)具體的功能實現(xiàn)C+C+class TPointpublic: void setX( int aX ) m_iX = aX; void setY( int aY ) m_iY = aY; void
6、 move( int aX, int aY ) m_iX += aX; m_iY += aY; void display() const coutX:m_iXendl; coutY:m_iYendl; private: int m_iX; int m_iY;類體內(nèi)定義:類體內(nèi)定義:5_1C+C+類體外定義:類體外定義: :() expression;void Dog:yelp() coutWo Wo!endl;C+C+class TDatepublic: void setDate( const int aYear, const int aMonth, const int aDay ); boo
7、l isLeapYear() const; void display() const;private: int m_iYear; int m_iMonth; int m_iDay;a_2C+C+void TDate:setDate( const int aYear, const int aMonth, const int aDay ) m_iYear = aYear; m_iMonth = aMonth; m_iDay = aDay;bool TDate:isLeapYear() const return(!(m_iYear%4)&(m_iYear%100)|!(m_iYear%400
8、);void TDate:display() const coutm_iYear.m_iMonth.m_iDayendl;a_2C+C+注意 成員函數(shù)類體外定義時,必須在函數(shù)名前面加“類名:” 若無“類名:”則該函數(shù)不是成員函數(shù)而是全局函數(shù)。 類體外定義成員函數(shù)時,類體內(nèi)必須聲明該成員函數(shù)! 不允許在類的聲明部分對成員變量進行初始化。 將類的聲明與定義分開,類的聲明放到頭文件,定義放到源文件中C+C+類與對象概述類與對象概述類類q類的聲明類的聲明q類的定義類的定義對象對象q對象的聲明與成員訪問對象的聲明與成員訪問q實例化對象實例化對象類和對象的簡單應(yīng)用舉例類和對象的簡單應(yīng)用舉例C+C+ 狗類狗
9、類行為行為 吠叫吠叫屬性屬性 名字名字 品種品種 年齡年齡 顏色顏色 萊絲萊絲行為行為 萊絲萊絲. .吠叫吠叫屬性屬性 萊絲萊絲. .名字名字: :萊絲萊絲 萊絲萊絲. .品種品種: :黑貝黑貝 萊絲萊絲. .年齡年齡: :三歲三歲 萊絲萊絲. .顏色顏色: :黑色黑色聲明萊絲是一只狗聲明萊絲是一只狗C+C+ ;對象名表一個對象對象數(shù)組指向?qū)ο蟮闹羔樁鄠€對象TDate date; Dog dog; TDate today, tomorrow;TDate *pDate;TDate array10;對象引用Dog dg; Dog &ref = dg; C+C+.;.();TDate tod
10、ay;today.setDate( 1998, 10, 19 );bool isLeap = today.isLeapYear(); TPoint point;point.setX( 100 );point.setY( 100 );point.move( 50, 50 );point.display();C+C+-;-();TDate *pDate = new TDate;pDate-setDate( 1998, 10, 19 );bool isLeap = pDate-isLeapYear();delete pDate; TPoint *pPoint = new TPoint;pPoint-
11、setX( 100 );pPoint-setY( 100 );pPoint-move( 50, 50 );pPoint-display();delete pPoint; C+C+(*).;(*).();(&)-();(&)-;對象和指向?qū)ο蟮闹羔樛瑯涌梢赃M行取地址和取值操作C+C+TDate *pDate = new TDate;(*pDate).setDate( 1998, 10, 19 );bool isLeap = (*pDate).isLeapYear();delete pDate; TPoint point;(&point)-setX( 100 );(&
12、;point)-setY( 100 );(&point)-move( 50, 50 );(&point)-display();C+C+類與對象概述類與對象概述類類q類的聲明類的聲明q類的定義類的定義對象對象q對象的聲明與成員訪問對象的聲明與成員訪問q實例化對象實例化對象類和對象的簡單應(yīng)用舉例類和對象的簡單應(yīng)用舉例C+C+類的實例化類的實例化棧區(qū)棧區(qū)堆區(qū)堆區(qū)靜態(tài)存儲區(qū)靜態(tài)存儲區(qū)( (全局區(qū))全局區(qū))C+C+法一:先聲明類類型,再定義對象 推 薦class Studentpublic: void display() const . . private: int m_iNum; st
13、ring m_strName; char m_cSex;Student stud1; /class Student stud1;C+C+法二: 在聲明類的同時定義對象class Studentpublic: void display() const coutnum: m_iNum endl; coutname: m_strName endl; coutsex: m_cSex endl; private: int m_iNum; string m_strName; char m_cSex;stud1,stud2;C+C+法三: 不出現(xiàn)類名,直接定義對象class /省略類名public: voi
14、d display() const coutnum: m_iNum endl; coutname: m_strName endl; coutsex: m_cSex endl; private: int m_iNum; string m_strName; char m_cSex;stud1,stud2;C+C+注意 通常采用先定義類,后定義對象的方法,其他方法不使用 對象占據(jù)內(nèi)存單元而類類型不占據(jù)內(nèi)存單元 以上方法創(chuàng)建的對象均在棧區(qū)C+C+1.概念:用new創(chuàng)建的無名對象,存儲在堆區(qū)2.建立堆對象new 類名new 類名無符號整型表達式 可為無符號整型變量C+C+const int KArrSi
15、ze = 100; TDate *pdate = new TDate;TDate *arry = new TDateKArrSize;Dog *dog = new Dog;Dog *dogArr = new DogKArrSize;C+C+3.釋放堆對象delete 指針名delete 指針名例1:A *ptr = NULL;ptr = new A;delete ptr;例2:A *ptr = NULL;ptr = new A5;delete ptr;C+C+注意 delete只能回收由new返回的指針指向的內(nèi)存空間,包括空指針。 一個指針只能delete一次。 刪除對象數(shù)組時無論幾維arra
16、y,delete前都只有一個。 確認不用的空間一定要delete。C+C+全局區(qū)中的對象和內(nèi)置類型static變量存儲類別規(guī)則是相同class Studentpublic: void setName( const string aName ) m_strName = aName void display() const coutm_strNameendl; private: string m_strName;b1C+C+static Student s_stu2;int main() Stdudent stu; stu.setName(Jim ); stu.display(); static
17、Student s_stu1; s_stu1.setName(Lily ); s_stu1.display(); s_stu2.setName(Morrison); s_stu2.display(); return 0;C+C+思考:對象的存儲方式?C+C+對象1對象2對象10. 成員函數(shù)data1data2data10對象的存儲方式:C+C+#include using namespace std;class Timepublic: void set();private: int m_iHour; int m_iMinute; int m_iSec;void Time:set() cin m
18、_iHour m_iMinute m_iSec; int main() cout sizeof(Time) endl; return 0;5_2C+C+注意 無論成員函數(shù)在類內(nèi)還是在類外定義,成員函數(shù)都不占用對象的存儲區(qū) 說成員函數(shù)是對象的只是從邏輯角度上說的,而非物理角度而言 對象的存儲類別和內(nèi)置類型變量相同C+C+思考:對象中成員的引用方法?C+C+回憶結(jié)構(gòu)體的訪問#include #include using namespace std;struct Student string num; char sex; string name;Student stu;int main() stu.
19、num = 007; = haha; stu.sex = M; cout stu.num stu.sex endl; return 0;C+C+通過對象名和 “ . ”訪問通過對象指針訪問通過對象引用訪問成員的訪問方式C+C+法一:通過對象名訪問: 對象名 . . 成員名public: void display() coutX: m_iXendl; coutY: m_iY 成員名(*對象指針). 成員名class TPointpublic: void display() coutX: m_iXendl; coutY: m_iYdisplay(); return 0;5_4C+C+法二:通過對象引用訪問注意 對象引用與普通變量引用的定義方法相同class TPointpublic: void display() coutX: m_iXendl; coutY: m_iYendl; void set( int aX, int aY) m_iX = aX; m_iY = aY; private: int m_iX; int m_iY;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45572-2025航空航天用帶肋十字槽
- 材料力學(xué)與智能材料性能評估重點基礎(chǔ)知識點
- 材料疲勞斷裂機理誤差分析重點基礎(chǔ)知識點
- 火災(zāi)風(fēng)險應(yīng)急預(yù)案演練記錄(3篇)
- 行政法學(xué)的現(xiàn)實意義探討試題及答案
- 風(fēng)險管理在項目中的應(yīng)用試題及答案
- 戰(zhàn)略管理中的團隊合作試題及答案
- 行政法學(xué)學(xué)術(shù)研究試題與答案分享
- 2025年軟件水平考試試題及答案的更新
- 2025年編程與科技的融合發(fā)展趨勢試題及答案
- 2025湖北省安全員-B證(項目經(jīng)理)考試題庫
- 2025年中國科技成果轉(zhuǎn)化服務(wù)行業(yè)市場集中度、企業(yè)競爭格局分析報告-智研咨詢發(fā)布
- 第16課《有為有不為》公開課一等獎創(chuàng)新教學(xué)設(shè)計
- 體育賽事經(jīng)濟影響評估模型-深度研究
- 2025年上海奉賢區(qū)社區(qū)工作者及事業(yè)單位招聘177人歷年高頻重點提升(共500題)附帶答案詳解
- 小學(xué)一年級奧數(shù)經(jīng)典100試題(五篇)
- 2025年中國消防救援學(xué)院第二批面向應(yīng)屆畢業(yè)生招聘28人歷年管理單位筆試遴選500模擬題附帶答案詳解
- T-CIRA 46-2023 核電廠液態(tài)流出物中鍶89和鍶90分析 液體閃爍法
- 介入手術(shù)室感染控制管理
- 1學(xué)會尊重-尊重自己(說課稿 )-2023-2024學(xué)年道德與法治六年級下冊統(tǒng)編版
- 會計案例分析-終結(jié)性考核-國開(SC)-參考資料
評論
0/150
提交評論