版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第4講 類與對象(2)目錄目錄4.1 面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特點(diǎn)4.2 類和對象類和對象4.3 構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)4.4 類的組合類的組合4.5 UML圖形標(biāo)識4.6 結(jié)構(gòu)體和聯(lián)合體24.4.1組合 類中的成員數(shù)據(jù)是另一個(gè)類的對象。 可以在已有抽象的基礎(chǔ)上實(shí)現(xiàn)更復(fù)雜的抽象。例:線段類34.4 類的組合類組合的構(gòu)造函數(shù)設(shè)計(jì) 原則:不僅要負(fù)責(zé)對本類中的基本類型成員數(shù)據(jù)賦初值,也要對對象成員初始化。 聲明形式:類名:類名(對象成員所需的形參,本類成員形參) :對象1(參數(shù)),對象2(參數(shù)),. /函數(shù)體其他語句44.4 類的組合 4.4.1 組合初始化列表初始化列表構(gòu)造組合類對象時(shí)
2、的初始化次序 首先對構(gòu)造函數(shù)初始化列表中列出的成員(包括基本類型成員和對象成員)進(jìn)行初始化,初始化次序是成員在類體中定義的次序。成員對象構(gòu)造函數(shù)調(diào)用順序:按對象成員的聲明順序,先聲明者先構(gòu)造。初始化列表中未出現(xiàn)的成員對象,調(diào)用用默認(rèn)構(gòu)造函數(shù)(即無形參的)初始化 處理完初始化列表之后,再執(zhí)行構(gòu)造函數(shù)的函數(shù)體。54.4 類的組合 4.4.1 組合例4-4 類的組合,線段(Line)類/4_4.cpp#include #include using namespace std;class Point /Point類定義public:Point(int xx = 0, int yy = 0) /構(gòu)造函數(shù)
3、x = xx;y = yy;Point(Point &p);/復(fù)制構(gòu)造函數(shù)聲明int getX() return x; int getY() return y; private:int x, y;Point:Point(Point &p) /復(fù)制構(gòu)造函數(shù)的實(shí)現(xiàn)x = p.x;y = p.y;cout Calling the copy constructor of Point endl;64.4 類的組合 4.4.1 組合例4-4(續(xù))/類的組合class Line /Line類的定義public:/外部接口Line(Point xp1, Point xp2);Line(Line
4、 &l);double getLen() return len; private:/私有數(shù)據(jù)成員Point p1, p2;/Point類的對象p1,p2double len;/組合類的構(gòu)造函數(shù)Line:Line(Point xp1, Point xp2) : p1(xp1), p2(xp2) cout Calling constructor of Line endl;double x = static_cast(p1.getX() - p2.getX();double y = static_cast(p1.getY() - p2.getY();len = sqrt(x * x + y
5、* y);Line:Line (Line &l): p1(l.p1), p2(l.p2) /組合類的復(fù)制構(gòu)造函數(shù)cout Calling the copy constructor of Line endl;len = l.len;74.4 類的組合 4.4.1 組合例4-4(續(xù))/主函數(shù)int main() Point myp1(1, 1), myp2(4, 5);/建立Point類的對象Line line(myp1, myp2);/建立Line類的對象Line line2(line);/利用復(fù)制構(gòu)造函數(shù)建立一個(gè)新對象cout The length of the line is: ;c
6、out line.getLen() endl;cout The length of the line2 is: ;cout line2.getLen() endl;return 0;84.4 類的組合 4.4.1 組合運(yùn)行結(jié)果如下:Calling the copy constructor of PointCalling the copy constructor of PointCalling the copy constructor of PointCalling the copy constructor of PointCalling constructor of LineCalling t
7、he copy constructor of PointCalling the copy constructor of PointCalling the copy constructor of LineThe length of the line is: 5The length of the line2 is: 54.4.2 前向引用聲明 類應(yīng)該先聲明,后使用 如果需要在某個(gè)類的定義之前,引用該類,則應(yīng)進(jìn)行前向引用聲明。 前向引用聲明只為程序引入一個(gè)標(biāo)識符,但具體聲明在其他地方。94.4 類的組合舉例class B; /前向引用聲明class A public: void f(B b);cla
8、ss B public: void g(A a);104.4 類的組合 4.4.2 前向引用聲明前向引用聲明注意事項(xiàng) 使用前向引用聲明雖然可以解決一些問題,但它并不是萬能的。需要注意的是,盡管使用了前向引用聲明,但是在在提供一個(gè)完整的類聲明之前,不能聲明該類的對象提供一個(gè)完整的類聲明之前,不能聲明該類的對象,也不也不能在內(nèi)聯(lián)成員函數(shù)中使用該類的對象能在內(nèi)聯(lián)成員函數(shù)中使用該類的對象。請看下面的程序段:114.4 類的組合 4.4.2 前向引用聲明class Fred; /前向引用聲明class Barney Fred x; /錯(cuò)誤:類Fred的聲明尚不完善;class Fred Barney y
9、;前向引用聲明注意事項(xiàng)(續(xù))class Fred; /前向引用聲明 class Barney public: void method() x.yabbaDabbaDo(); /錯(cuò)誤:Fred類的對象在定義之前被使用 private: Fred &x;/正確,經(jīng)過前向引用聲明,可以聲明Fred類的對象引用; class Fred public: void yabbaDabbaDo();private: Barney &y; 124.4 類的組合 4.4.2 前向引用聲明前向引用聲明注意事項(xiàng) 應(yīng)該記?。寒?dāng)你使用前向引用聲明時(shí),你只能使用被聲明只能使用被聲明的符號的符號,而不能涉及類
10、的任何細(xì)節(jié)而不能涉及類的任何細(xì)節(jié)。134.4 類的組合 4.4.2 前向引用聲明4.5.1 UML簡介 UML(Unified Modeling Language)語言是一種可視化的的面向?qū)ο蠼UZ言。 UML有三個(gè)基本的部分 事物(Things)UML中重要的組成部分,在模型中屬于最靜態(tài)的部分,代表概念上的或物理上的元素 關(guān)系(Relationships)關(guān)系把事物緊密聯(lián)系在一起 圖(Diagrams)圖是很多有相互相關(guān)的事物的組144.5 UML圖形標(biāo)識4.5.2 UML類圖 舉例:Clock類的完整表示 Clock類的簡潔表示154.5 UML圖形標(biāo)識Clock- hour : int-
11、 minute : int- second : int+ showTime() : void+ setTime(newH:int=0,newM:int=0,newS:int=0):voidClock類名數(shù)據(jù)成員函數(shù)成員對象圖164.5 UML圖形標(biāo)識 4.5.2 UML類圖myClock : Clock- hour : int- minute : int- second : intmyClock : Clock數(shù)據(jù)成員可選例4-5 采用UML方法來描述例4-4中Line類和Point類的關(guān)系174.5 UML圖形標(biāo)識 4.5.2 UML類圖Point- x : int- y : int+ Po
12、int(xx : int = 0, yy : int = 0)+ Point(p : Point &)+ getX() : int+ getY() : intLine- len : double+ Line(xp1 : Point, xp2 : Point)+ Line( : Line &)+ getLen() : double幾種關(guān)系的圖形標(biāo)識 依賴關(guān)系表示“類A”使用了“類B”,或稱“類A”依賴“類B” 也可以這樣說,要完成類A里的所有功能, 一定要有類B的方法協(xié)助才行184.5 UML圖形標(biāo)識 4.5.2 UML類圖類 A類 B例4-5 采用UML方法來描述例4-4中Li
13、ne類和Point類的依賴關(guān)系194.5 UML圖形標(biāo)識 4.5.2 UML類圖Point- x : int- y : int+ Point(xx : int = 0, yy : int = 0)+ Point(p : Point &)+ getX() : int+ getY() : intLine- len : double+ Line(xp1 : Point, xp2 : Point)+ Line( : Line &)+ getLen() : double幾種關(guān)系的圖形標(biāo)識 作用關(guān)系關(guān)聯(lián)圖中的“重?cái)?shù)A”決定了類B的每個(gè)對象與類A的多少個(gè)對象發(fā)生作用,同樣“重?cái)?shù)B”決定了類A
14、的每個(gè)對象與類B的多少個(gè)對象發(fā)生作用。204.5 UML圖形標(biāo)識 4.5.2 UML類圖類 A重?cái)?shù)A類 B重?cái)?shù)B例4-5 采用UML方法來描述例4-4中Line類和Point類的關(guān)系214.5 UML圖形標(biāo)識 4.5.2 UML類圖Point- x : int- y : int+ Point(xx : int = 0, yy : int = 0)+ Point(p : Point &)+ getX() : int+ getY() : intLine- len : double+ Line(xp1 : Point, xp2 : Point)+ Line( : Line &)+ g
15、etLen() : double-p1-p21.*21.*幾種關(guān)系的圖形標(biāo)識 包含關(guān)系聚集和組合 聚集 組合表示類之間的關(guān)系是整體與部分的關(guān)系整體與部分的關(guān)系,224.5 UML圖形標(biāo)識 4.5.2 UML類圖類 A類 B重?cái)?shù)A重?cái)?shù)B類 A類 B重?cái)?shù)A重?cái)?shù)B例4-5 采用UML方法來描述例4-4中Line類和Point類的關(guān)系234.5 UML圖形標(biāo)識 4.5.2 UML類圖Point- x : int- y : int+ Point(xx : int = 0, yy : int = 0)+ Point(p : Point &)+ getX() : int+ getY() : intL
16、ine- len : double+ Line(xp1 : Point, xp2 : Point)+ Line( : Line &)+ getLen() : double-p1-p21.*21.*幾種關(guān)系的圖形標(biāo)識 繼承關(guān)系泛化 例:動(dòng)物類和老虎類244.5 UML圖形標(biāo)識 4.5.2 UML類圖父類 A子類 1子類 2注釋 在UML圖形上,注釋表示為帶有褶角的矩形,然后用虛線連接到UML的其他元素上,它是一種用于在圖中附加文字注釋的機(jī)制。254.5 UML圖形標(biāo)識 4.5.2 UML類圖注釋文字例4-6帶有注釋的Line類和Point類關(guān)系的描述264.5 UML圖形標(biāo)識 4.5.2
17、 UML類圖Point- x : int- y : int+ Point(xx : int = 0, yy : int = 0)+ Point(p : Point &)+ getX() : int+ getY() : intLine- len : double+ Line(xp1 : Point, xp2 : Point)+ Line( : Line &)+ getLen() : double-p1-p21.*21.*單向組合:直線段包含端點(diǎn)p1、p24.6.1 結(jié)構(gòu)體 結(jié)構(gòu)體是一種特殊形態(tài)的類 與類的唯一區(qū)別:類的缺省訪問權(quán)限是private,結(jié)構(gòu)體的缺省訪問權(quán)限是publi
18、c 結(jié)構(gòu)體存在的主要原因:與C語言保持兼容 什么時(shí)候用結(jié)構(gòu)體而不用類 定義主要用來保存數(shù)據(jù)、而沒有什么操作的類型 人們習(xí)慣將結(jié)構(gòu)體的數(shù)據(jù)成員設(shè)為公有,因此這時(shí)用結(jié)構(gòu)體更方便274.6 結(jié)構(gòu)體和聯(lián)合體結(jié)構(gòu)體的定義和初始化 結(jié)構(gòu)體定義struct 結(jié)構(gòu)體名稱 公有成員protected: 保護(hù)型成員private: 私有成員; 一些結(jié)構(gòu)體變量的初始化可以用以下形式類型名 變量名 = 成員數(shù)據(jù)1初值, 成員數(shù)據(jù)2初值, ;284.6 結(jié)構(gòu)體和聯(lián)合體 4.6.1 結(jié)構(gòu)體例4-7用結(jié)構(gòu)體表示學(xué)生的基本信息#include #include #include using namespace std;str
19、uct Student /學(xué)生信息結(jié)構(gòu)體int num;/學(xué)號string name;/姓名,字符串對象,將在第6章詳細(xì)介紹char sex;/性別int age;/年齡;294.6 結(jié)構(gòu)體和聯(lián)合體 4.6.1 結(jié)構(gòu)體例4-7(續(xù))int main() Student stu = 97001, Lin Lin, F, 19 ;cout Num: stu.num endl;cout Name: endl;cout Sex: stu.sex endl;cout Age: stu.age endl;return 0;運(yùn)行結(jié)果:Num: 97001Name: Lin LinSex:
20、FAge: 19304.6 結(jié)構(gòu)體和聯(lián)合體 4.6.1 結(jié)構(gòu)體4.6.2 聯(lián)合體 聲明形式union 聯(lián)合體名稱 公有成員protected: 保護(hù)型成員private: 私有成員; 特點(diǎn):成員共用相同的內(nèi)存單元任何兩個(gè)成員不會(huì)同時(shí)有效314.6 結(jié)構(gòu)體和聯(lián)合體聯(lián)合體的內(nèi)存分配union Mark /表示成績的聯(lián)合體char grade; /等級制的成績bool pass;/只記是否通過課程的成績int percent;/百分制的成績;324.6 結(jié)構(gòu)體和聯(lián)合體 4.6.2 聯(lián)合體Markgradepercentpass無名聯(lián)合例:例:union int i; float f;在程序中可以這樣
21、使用:i = 10;f = 2.2;334.6 結(jié)構(gòu)體和聯(lián)合體 4.6.2 聯(lián)合體無名聯(lián)合沒有標(biāo)記名,只是聲明一個(gè)成員項(xiàng)的集合,這些成員項(xiàng)具有相同的內(nèi)存地址,可以由成員項(xiàng)的名字直接訪問。例4-8使用聯(lián)合體保存成績信息,并且輸出。#include #include using namespace std;class ExamInfo private:string name;/課程名稱/采用何種計(jì)分方式enum GRADE, PASS, PERCENTAGE mode; union char grade;/等級制的成績bool pass;/只記是否通過課程的成績int percent;/百分制的成績;344.6 結(jié)構(gòu)體和聯(lián)合體 4.6.2 聯(lián)合體例4-8(續(xù))public:/三種構(gòu)造函數(shù),分別用等級、是否通過和百分初始化ExamInfo(string name, char grade): name(name), mode(GRADE), grade(grade) ExamInfo(string name,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)技術(shù)課件教學(xué)課件
- 2024年度設(shè)備供應(yīng)與安裝合同
- 2024年度國際搬家集裝箱租賃合同
- 2024年城市軌道交通系統(tǒng)集成與維護(hù)合同
- 2024光通信技術(shù)研發(fā)與生產(chǎn)合同
- 2024年度區(qū)塊鏈技術(shù)應(yīng)用研發(fā)合同
- 2024年度廢舊物資回收利用合同
- 2024年度三人合伙知識產(chǎn)權(quán)協(xié)議
- 2024年床上用品批量訂購合同
- 2024年度智能客服系統(tǒng)技術(shù)服務(wù)合同
- 木門窗施工方案
- 2024-2025學(xué)年八年級語文上冊期末專項(xiàng)復(fù)習(xí):綜合性學(xué)習(xí)+口語交際【考題猜想】原卷版
- 逐夢芳華-吉林省松原市前郭爾羅斯蒙古族自治縣南部學(xué)區(qū)三校2024-2025學(xué)年九年級上學(xué)期11月期中道德與法治試題(含答案)
- 四川省成都市九縣區(qū)2024-2025學(xué)年高一上學(xué)期期中考試數(shù)學(xué)試題(含答案)
- 2024秋國開《四史通講》期末大作業(yè)試題B答案(第1套)
- 2024年8月CCAA國家注冊審核員《管理體系認(rèn)證基礎(chǔ)》考試題目含解析
- 2024新版(北京版)三年級英語上冊單詞帶音標(biāo)
- 戶外廣告安裝施工方案
- 鈉離子電池低成本硬碳負(fù)極關(guān)鍵技術(shù)開發(fā)-2024-10-技術(shù)資料
- 2025屆廣東省珠海市紫荊中學(xué)高二數(shù)學(xué)第一學(xué)期期末教學(xué)質(zhì)量檢測試題含解析
- 期中測試卷(1-3單元)(試題)2024-2025學(xué)年六年級上冊數(shù)學(xué)蘇教版
評論
0/150
提交評論