




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第4講 類與對象(2)目錄目錄4.1 面向對象程序設計的基本特點4.2 類和對象類和對象4.3 構造函數(shù)和析構函數(shù)構造函數(shù)和析構函數(shù)4.4 類的組合類的組合4.5 UML圖形標識4.6 結構體和聯(lián)合體24.4.1組合 類中的成員數(shù)據是另一個類的對象。 可以在已有抽象的基礎上實現(xiàn)更復雜的抽象。例:線段類34.4 類的組合類組合的構造函數(shù)設計 原則:不僅要負責對本類中的基本類型成員數(shù)據賦初值,也要對對象成員初始化。 聲明形式:類名:類名(對象成員所需的形參,本類成員形參) :對象1(參數(shù)),對象2(參數(shù)),. /函數(shù)體其他語句44.4 類的組合 4.4.1 組合初始化列表初始化列表構造組合類對象時
2、的初始化次序 首先對構造函數(shù)初始化列表中列出的成員(包括基本類型成員和對象成員)進行初始化,初始化次序是成員在類體中定義的次序。成員對象構造函數(shù)調用順序:按對象成員的聲明順序,先聲明者先構造。初始化列表中未出現(xiàn)的成員對象,調用用默認構造函數(shù)(即無形參的)初始化 處理完初始化列表之后,再執(zhí)行構造函數(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) /構造函數(shù)
3、x = xx;y = yy;Point(Point &p);/復制構造函數(shù)聲明int getX() return x; int getY() return y; private:int x, y;Point:Point(Point &p) /復制構造函數(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ù)據成員Point p1, p2;/Point類的對象p1,p2double len;/組合類的構造函數(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) /組合類的復制構造函數(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);/利用復制構造函數(shù)建立一個新對象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 組合運行結果如下: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 前向引用聲明 類應該先聲明,后使用 如果需要在某個類的定義之前,引用該類,則應進行前向引用聲明。 前向引用聲明只為程序引入一個標識符,但具體聲明在其他地方。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 前向引用聲明前向引用聲明注意事項 使用前向引用聲明雖然可以解決一些問題,但它并不是萬能的。需要注意的是,盡管使用了前向引用聲明,但是在在提供一個完整的類聲明之前,不能聲明該類的對象提供一個完整的類聲明之前,不能聲明該類的對象,也不也不能在內聯(lián)成員函數(shù)中使用該類的對象能在內聯(lián)成員函數(shù)中使用該類的對象。請看下面的程序段:114.4 類的組合 4.4.2 前向引用聲明class Fred; /前向引用聲明class Barney Fred x; /錯誤:類Fred的聲明尚不完善;class Fred Barney y
9、;前向引用聲明注意事項(續(xù))class Fred; /前向引用聲明 class Barney public: void method() x.yabbaDabbaDo(); /錯誤:Fred類的對象在定義之前被使用 private: Fred &x;/正確,經過前向引用聲明,可以聲明Fred類的對象引用; class Fred public: void yabbaDabbaDo();private: Barney &y; 124.4 類的組合 4.4.2 前向引用聲明前向引用聲明注意事項 應該記住:當你使用前向引用聲明時,你只能使用被聲明只能使用被聲明的符號的符號,而不能涉及類
10、的任何細節(jié)而不能涉及類的任何細節(jié)。134.4 類的組合 4.4.2 前向引用聲明4.5.1 UML簡介 UML(Unified Modeling Language)語言是一種可視化的的面向對象建模語言。 UML有三個基本的部分 事物(Things)UML中重要的組成部分,在模型中屬于最靜態(tài)的部分,代表概念上的或物理上的元素 關系(Relationships)關系把事物緊密聯(lián)系在一起 圖(Diagrams)圖是很多有相互相關的事物的組144.5 UML圖形標識4.5.2 UML類圖 舉例:Clock類的完整表示 Clock類的簡潔表示154.5 UML圖形標識Clock- hour : int-
11、 minute : int- second : int+ showTime() : void+ setTime(newH:int=0,newM:int=0,newS:int=0):voidClock類名數(shù)據成員函數(shù)成員對象圖164.5 UML圖形標識 4.5.2 UML類圖myClock : Clock- hour : int- minute : int- second : intmyClock : Clock數(shù)據成員可選例4-5 采用UML方法來描述例4-4中Line類和Point類的關系174.5 UML圖形標識 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幾種關系的圖形標識 依賴關系表示“類A”使用了“類B”,或稱“類A”依賴“類B” 也可以這樣說,要完成類A里的所有功能, 一定要有類B的方法協(xié)助才行184.5 UML圖形標識 4.5.2 UML類圖類 A類 B例4-5 采用UML方法來描述例4-4中Li
13、ne類和Point類的依賴關系194.5 UML圖形標識 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幾種關系的圖形標識 作用關系關聯(lián)圖中的“重數(shù)A”決定了類B的每個對象與類A的多少個對象發(fā)生作用,同樣“重數(shù)B”決定了類A
14、的每個對象與類B的多少個對象發(fā)生作用。204.5 UML圖形標識 4.5.2 UML類圖類 A重數(shù)A類 B重數(shù)B例4-5 采用UML方法來描述例4-4中Line類和Point類的關系214.5 UML圖形標識 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.*幾種關系的圖形標識 包含關系聚集和組合 聚集 組合表示類之間的關系是整體與部分的關系整體與部分的關系,224.5 UML圖形標識 4.5.2 UML類圖類 A類 B重數(shù)A重數(shù)B類 A類 B重數(shù)A重數(shù)B例4-5 采用UML方法來描述例4-4中Line類和Point類的關系234.5 UML圖形標識 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.*幾種關系的圖形標識 繼承關系泛化 例:動物類和老虎類244.5 UML圖形標識 4.5.2 UML類圖父類 A子類 1子類 2注釋 在UML圖形上,注釋表示為帶有褶角的矩形,然后用虛線連接到UML的其他元素上,它是一種用于在圖中附加文字注釋的機制。254.5 UML圖形標識 4.5.2 UML類圖注釋文字例4-6帶有注釋的Line類和Point類關系的描述264.5 UML圖形標識 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.*單向組合:直線段包含端點p1、p24.6.1 結構體 結構體是一種特殊形態(tài)的類 與類的唯一區(qū)別:類的缺省訪問權限是private,結構體的缺省訪問權限是publi
18、c 結構體存在的主要原因:與C語言保持兼容 什么時候用結構體而不用類 定義主要用來保存數(shù)據、而沒有什么操作的類型 人們習慣將結構體的數(shù)據成員設為公有,因此這時用結構體更方便274.6 結構體和聯(lián)合體結構體的定義和初始化 結構體定義struct 結構體名稱 公有成員protected: 保護型成員private: 私有成員; 一些結構體變量的初始化可以用以下形式類型名 變量名 = 成員數(shù)據1初值, 成員數(shù)據2初值, ;284.6 結構體和聯(lián)合體 4.6.1 結構體例4-7用結構體表示學生的基本信息#include #include #include using namespace std;str
19、uct Student /學生信息結構體int num;/學號string name;/姓名,字符串對象,將在第6章詳細介紹char sex;/性別int age;/年齡;294.6 結構體和聯(lián)合體 4.6.1 結構體例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;運行結果:Num: 97001Name: Lin LinSex:
20、FAge: 19304.6 結構體和聯(lián)合體 4.6.1 結構體4.6.2 聯(lián)合體 聲明形式union 聯(lián)合體名稱 公有成員protected: 保護型成員private: 私有成員; 特點:成員共用相同的內存單元任何兩個成員不會同時有效314.6 結構體和聯(lián)合體聯(lián)合體的內存分配union Mark /表示成績的聯(lián)合體char grade; /等級制的成績bool pass;/只記是否通過課程的成績int percent;/百分制的成績;324.6 結構體和聯(lián)合體 4.6.2 聯(lián)合體Markgradepercentpass無名聯(lián)合例:例:union int i; float f;在程序中可以這樣
21、使用:i = 10;f = 2.2;334.6 結構體和聯(lián)合體 4.6.2 聯(lián)合體無名聯(lián)合沒有標記名,只是聲明一個成員項的集合,這些成員項具有相同的內存地址,可以由成員項的名字直接訪問。例4-8使用聯(lián)合體保存成績信息,并且輸出。#include #include using namespace std;class ExamInfo private:string name;/課程名稱/采用何種計分方式enum GRADE, PASS, PERCENTAGE mode; union char grade;/等級制的成績bool pass;/只記是否通過課程的成績int percent;/百分制的成
22、績;344.6 結構體和聯(lián)合體 4.6.2 聯(lián)合體例4-8(續(xù))public:/三種構造函數(shù),分別用等級、是否通過和百分初始化ExamInfo(string name, char grade): name(name), mode(GRADE), grade(grade) ExamInfo(string name, bool pass): name(name), mode(PASS), pass(pass) ExamInfo(string name, int percent): name(name), mode(PERCENTAGE), percent(percent) void show();354.6
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c程序設計基礎考試試題及答案
- cad中級繪圖員考試試題及答案
- cad工程師考試試題及答案
- b證安全資格考試試題及答案
- ai面試題庫及答案濰坊銀行
- a1英語北京考試試題及答案
- 2025質量員考試試題及答案
- 基于光照強度的櫻桃番茄基質栽培營養(yǎng)液供應方案研究
- 高海拔地區(qū)藏族-漢族竇性心動過緩患者腸道菌群的差異性研究
- 基于結構方程模型的學生語言測評素養(yǎng)研究
- 國家職業(yè)技術技能標準 4-14-02-05 老年人能力評估師 人社廳發(fā)202332號
- 江蘇省南通市歷年中考數(shù)學試卷真題合集(共6套)
- 班組級培訓課件
- 飛行汽車的商業(yè)化應用
- 全國各氣象臺站區(qū)站號及經緯度
- 動漫設計畢業(yè)論文當代中國動漫的思考
- 大班數(shù)學《錢幣換算》課件
- 危險化學品企業(yè)安全培訓空間建設應用指南
- 國開電大本科《外國文學專題》在線形考(形考任務一至四)試題及答案
- 04.第四講 堅持以人民為中心
- 三年級下冊第七單元國寶大熊貓資料
評論
0/150
提交評論