C語言程序設計類與對象PPT課件_第1頁
C語言程序設計類與對象PPT課件_第2頁
C語言程序設計類與對象PPT課件_第3頁
C語言程序設計類與對象PPT課件_第4頁
C語言程序設計類與對象PPT課件_第5頁
已閱讀5頁,還剩66頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1第四章第四章 類與對象類與對象C+語言程序設計第1頁/共71頁2本章主要內容面向對象的思想OOP的基本特點類概念和聲明對象構造函數析構函數內聯成員函數拷貝構造函數類的組合第2頁/共71頁3回顧:面向過程的設計方法 重點: 如何實現細節過程,將數據與函數分開。 形式: 主模塊+若干個子模塊(main()+子函數)。 特點: 自頂向下,逐步求精功能分解。 缺點: 效率低,程序的可重用性差。面向對象的思想第3頁/共71頁4面向對象的方法 目的: 實現軟件設計的產業化。 觀點: 自然界是由實體(對象)所組成。 程序設計方法: 使用面向對象的觀點來描述模仿并處理現實問題。 要求: 高度概括、分類、和抽

2、象。面向對象的思想第4頁/共71頁5抽象抽象是對具體對象(問題)進行概括,抽出這一類對象的公共性質并加以描述的過程。 先注意問題的本質及描述,其次是實現過程或細節。 數據抽象:描述某類對象的屬性或狀態(對象相互區別的物理量)。 代碼抽象:描述某類對象的共有的行為特征或具有的功能。 抽象的實現:通過類的聲明。OOP的基本特點第5頁/共71頁6抽象實例鐘表 數據抽象:int Hour, int Minute, int Second 代碼抽象:SetTime(), ShowTime()OOP的基本特點第6頁/共71頁7抽象實例鐘表類class Clock public: void SetTime(i

3、nt NewH, int NewM, int NewS); void ShowTime(); private: int Hour,Minute,Second;OOP的基本特點第7頁/共71頁8抽象實例人 數據抽象:char *name,char *gender,int age,int id 代碼抽象:生物屬性角度:GetCloth(), Eat(), Step(),社會屬性角度:Work(), Promote() ,OOP的基本特點第8頁/共71頁9封裝將抽象出的數據成員、代碼成員相結合,將它們視為一個整體。 目的是曾強安全性和簡化編程,使用者不必了解具體的實現細節,而只需要通過外部接口,以特

4、定的訪問權限,來使用類的成員。 實現封裝:類聲明中的OOP的基本特點第9頁/共71頁10封裝 實例:class Clock public: void SetTime(int NewH,int NewM, int NewS); void ShowTime(); private: int Hour,Minute,Second;邊界特定的訪問權限OOP的基本特點外部接口第10頁/共71頁11繼承與派生是C+中支持層次分類的一種機制,允許程序員在保持原有類特性的基礎上,進行更具體的說明。實現:聲明派生類第七章OOP的基本特點第11頁/共71頁12多態性 多態:同一名稱,不同的功能實現方式。 目的:達到

5、行為標識統一,減少程序中標識符的個數。 實現:重載函數和虛函數第八章OOP的基本特點第12頁/共71頁13c+中的類 類是具有相同屬性和行為的一組對象的集合,它為屬于該類的全部對象提供了統一的,其內部包括屬性和行為兩個主要部分。 利用類可以實現數據的封裝、隱藏、繼承與派生。 利用類易于編寫大型復雜程序,其模塊化程度比C中采用函數更高。類 和 對 象第13頁/共71頁14類的聲明形式 類是一種用戶自定義類型,聲明形式:class 類名稱 public: 公有成員(外部接口) private: 私有成員 protected: 保護型成員類 和 對 象第14頁/共71頁15公有類型成員在關鍵字pub

6、lic后面聲明,它們是類與外部的接口,任何外部函數都可以訪問公有類型數據和函數。類 和 對 象第15頁/共71頁16私有類型成員在關鍵字private后面聲明,只允許本類中的函數訪問,而類外部的任何函數都不能訪問。如果緊跟在類名稱的后面聲明私有成員,則關鍵字private可以省略。類 和 對 象第16頁/共71頁17保護類型與private類似,其差別表現在繼承與派生時對派生類的影響不同,第七章講。類 和 對 象第17頁/共71頁18類的成員class Clock public: void SetTime(int NewH, int NewM, int NewS); void ShowTime

7、(); private: int Hour, Minute, Second;類 和 對 象成員數據成員函數第18頁/共71頁void Clock : SetTime(int NewH, int NewM, int NewS) Hour=NewH; Minute=NewM; Second=NewS;void Clock : ShowTime() coutHour:Minute:Second;19第19頁/共71頁20成員數據 與一般的變量聲明相同,但需要將它放在類的聲明體中。類 和 對 象第20頁/共71頁21成員函數 在類中說明原形,可以在類外給出函數體實現,并在函數名前使用類名加以限定。也可

8、以直接在類中給出函數體,形成內聯成員函數。 允許聲明重載函數和帶默認形參值的函數類 和 對 象第21頁/共71頁22內聯成員函數 為了提高運行時的效率,對于較簡單的函數可以聲明為內聯形式。 內聯函數體中不要有復雜結構(如循環語句和switch語句)。 在類中聲明內聯成員函數的方式: 將函數體放在類的聲明中。 使用inline關鍵字。類 和 對 象第22頁/共71頁23內聯成員函數舉例(一)class Point public: void Init(int initX,int initY) X=initX; Y=initY; int GetX() return X; int GetY() ret

9、urn Y; private: int X,Y;類 和 對 象第23頁/共71頁24內聯成員函數舉例(二)class Point public: void Init(int initX,int initY); int GetX(); int GetY(); private: int X,Y;類 和 對 象第24頁/共71頁inline void Point: Init(int initX,int initY) X=initX; Y=initY;inline int Point:GetX() return X;inline int Point:GetY() return Y;25第25頁/共71

10、頁26對象類的對象是該類的某一特定實體,即類類型的變量。聲明形式: 類名 對象名;例: Clock myClock;類 和 對 象第26頁/共71頁27類中成員的訪問方式 類中成員互訪 直接使用成員名 類外訪問 使用“對象名.成員名”方式訪問 public 屬性的成員類 和 對 象第27頁/共71頁28例4-1類的應用舉例#includeusing namespace std;class Clock ./類的聲明略/.類的實現略int main() Clock myClock; (8,30,30); ();類 和 對 象第28頁/共71頁29抽象實例鐘表類class Clock public:

11、 void SetTime(int NewH, int NewM, int NewS); void ShowTime(); private: int Hour,Minute,Second;OOP的基本特點第29頁/共71頁30構造函數 構造函數的作用是在對象被創建時使用特定的值構造對象,或者說將對象初始化為一個特定的狀態。 在對象創建時由系統自動調用。 如果程序中未聲明,則系統自動產生出一個默認形式的構造函數 允許為內聯函數、重載函數、帶默認形參值的函數構造函數和析構函數第30頁/共71頁31構造函數舉例class Clockpublic:Clock (int NewH, int NewM,

12、int NewS);/構造函數void SetTime(int NewH, int NewM, int NewS);void ShowTime();private:int Hour,Minute,Second;構造函數和析構函數第31頁/共71頁構造函數的實現:Clock:Clock(int NewH, int NewM, int NewS)Hour= NewH;Minute= NewM;Second= NewS;建立對象時構造函數的作用:int main() Clock c (0,0,0); /隱含調用構造函數,將初始值作為實參。 c.ShowTime();31第32頁/共71頁33拷貝構造

13、函數拷貝構造函數是一種特殊的構造函數,其形參為本類的對象引用。class 類名 public : 類名(形參);/構造函數 類名(類名 &對象名);/拷貝構造函數 .;類名: 類名(類名 &對象名)/拷貝構造函數的實現 函數體 構造函數和析構函數第33頁/共71頁34例4-2 拷貝構造函數舉例class Point public: Point(int xx=0,int yy=0)X=xx; Y=yy; Point(Point& p); int GetX() return X; int GetY() return Y; private: int X,Y;構造函數和析構函數

14、第34頁/共71頁Point:Point (Point& p) X=p.X; Y=p.Y; cout拷貝構造函數被調用endl;34第35頁/共71頁36例4-2 拷貝構造函數舉例 當用類的一個對象去初始化該類的另一個對象時系統自動調用拷貝構造函數實現拷貝賦值。int main() Point A(1,2); Point B(A); /拷貝構造函數被調用 coutB.GetX()endl;構造函數和析構函數第36頁/共71頁37例4-2拷貝構造函數舉例 若函數的形參為類對象,調用函數時,實參賦值給形參,系統自動調用拷貝構造函數。例如:void fun1(Point p) coutp.G

15、etX()endl; int main() Point A(1,2); fun1(A); /調用拷貝構造函數 構造函數和析構函數第37頁/共71頁38拷貝構造函數(例4-2) 當函數的返回值是類對象時,系統自動調用拷貝構造函數。例如:Point fun2() Point A(1,2); return A; /調用拷貝構造函數int main() Point B; B=fun2(); 構造函數和析構函數第38頁/共71頁39拷貝構造函數如果程序員沒有為類聲明拷貝初始化構造函數,則編譯器自己生成一個拷貝構造函數。這個構造函數執行的功能是:用作為初始值的對象的每個數據成員的值,初始化將要建立的對象的

16、對應數據成員。構造函數和析構函數第39頁/共71頁40析構函數 完成對象被刪除前的一些清理工作。 在對象的生存期結束的時刻系統自動調用它,然后再釋放此對象所屬的空間。 如果程序中未聲明析構函數,編譯器將自動產生一個默認的析構函數。構造函數和析構函數第40頁/共71頁41構造函數和析構函數舉例#includeusing namespace std;class Point public: Point(int xx,int yy); Point(); /.其它函數原形 private: int X,int Y;構造函數和析構函數第41頁/共71頁Point:Point(int xx,int yy)

17、X=xx; Y=yy;Point:Point()/.其它函數的實現略41第42頁/共71頁43類的應用舉例(例4-3)一圓型游泳池如圖所示,現在需在其周圍建一圓型過道,并在其四周圍上柵欄。柵欄價格為35元/米,過道造價為20元/平方米。過道寬度為3米,游泳池半徑由鍵盤輸入。要求編程計算并輸出過道和柵欄的造價。游泳池過道第43頁/共71頁#include using namespace std;const float PI = 3.14159;const float FencePrice = 35;const float ConcretePrice = 20;/聲明類Circle 及其數據和方法

18、class Circle private: float radius; public: Circle(float r); /構造函數 float Circumference() const; /圓周長 float Area() const; /圓面積;43第44頁/共71頁/ 類的實現/ 構造函數初始化數據成員radiusCircle:Circle(float r)radius=r/ 計算圓的周長float Circle:Circumference() return 2 * PI * radius; / 計算圓的面積 float Circle:Area() return PI * radius

19、 * radius;44第45頁/共71頁void main () float radius; float FenceCost, ConcreteCost; / 提示用戶輸入半徑 coutradius; / 聲明 Circle 對象 Circle Pool(radius); Circle PoolRim(radius + 3); 45第46頁/共71頁/ 計算柵欄造價并輸出 FenceCost = PoolRim.Circumference() * FencePrice; cout Fencing Cost is ¥ FenceCost endl; / 計算過道造價并輸出 ConcreteCo

20、st = (PoolRim.Area() - Pool.Area()*ConcretePrice; cout Concrete Cost is ¥ ConcreteCost yabbaDabbaDo(); /錯誤:Fred類的對象在定義之前被使用 private: Fred* x; /正確,經過前向引用聲明,可以聲明Fred類的對象指針 ; class Fred public: void yabbaDabbaDo(); private: Barney* y; ; 類 的 組 合第59頁/共71頁60前向引用聲明注意事項 應該記住:當你使用前向引用聲明時,你只能使用被聲明的符號,而不能涉及類的任

21、何細節。類 的 組 合第60頁/共71頁61UML簡介 UML語言是一種可視化的的面向對象建模語言。 UML有三個基本的部分 事物(Things)UML中重要的組成部分,在模型中屬于最靜態的部分,代表概念上的或物理上的元素 關系(Relationships)關系把事物緊密聯系在一起 圖(Diagrams)圖是很多有相互相關的事物的組UML圖形標識第61頁/共71頁62UML中有4種類型的事物 結構事物(Structural things) 動作事物(Behavioral things) 分組事物(Grouping things) 注釋事物(Annotational things)UML圖形標識第62頁/共71頁63UML中的關系 依賴(Dependencies) 關聯(Association) 泛化(generalization) 實現(realuzation)UML圖形標識第63頁/共71頁64UML中的9種圖 類圖(class diagram) 對象圖(class diagram) 用例圖(Use case diagram) 順序圖(Sequence diagram) 協作圖(Collaboration diagram) 狀態圖(Statechart diagram) 活

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論