類和對象C++語言程序設(shè)計_第1頁
類和對象C++語言程序設(shè)計_第2頁
類和對象C++語言程序設(shè)計_第3頁
類和對象C++語言程序設(shè)計_第4頁
類和對象C++語言程序設(shè)計_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第四章 類與對象C+語言程序設(shè)計類和對象C+語言程序設(shè)計本章主要內(nèi)容面向?qū)ο蟮乃枷隣OP的基本特點類概念和聲明對象構(gòu)造函數(shù)析構(gòu)函數(shù)內(nèi)聯(lián)成員函數(shù)拷貝構(gòu)造函數(shù)類的組合2類和對象C+語言程序設(shè)計回顧:面向過程的設(shè)計方法重點:如何實現(xiàn)的細節(jié)和過程,將數(shù)據(jù)與函數(shù)分開。形式:主模塊+若干個子模塊(main()+子函數(shù))。特點:自頂向下,逐步求精功能分解。缺點:效率低,程序的可重用性差。面向?qū)ο蟮乃枷?類和對象C+語言程序設(shè)計面向?qū)ο蟮姆椒康模簩崿F(xiàn)軟件設(shè)計的產(chǎn)業(yè)化。觀點:自然界是由實體(對象)所組成。程序設(shè)計方法:使用面向?qū)ο蟮挠^點來描述模仿并處理現(xiàn)實問題。要求:高度概括、分類、和抽象。面向?qū)ο蟮乃枷?類

2、和對象C+語言程序設(shè)計抽象抽象是對具體對象(問題)進行概括,抽出這一類對象的公共性質(zhì)并加以描述的過程。先注意問題的本質(zhì)及描述,其次是實現(xiàn)過程或細節(jié)。數(shù)據(jù)抽象:描述某類對象的屬性或狀態(tài)(對象相互區(qū)別的物理量)。代碼抽象:描述某類對象的共有的行為特征或具有的功能。抽象的實現(xiàn):通過類的聲明。OOP的基本特點5類和對象C+語言程序設(shè)計抽象實例鐘表數(shù)據(jù)抽象:int Hour,int Minute,int Second代碼抽象:SetTime(),ShowTime()OOP的基本特點6類和對象C+語言程序設(shè)計抽象實例鐘表類class Clock public: void SetTime(int NewH,

3、int NewM,int NewS); void ShowTime(); private: int Hour,Minute,Second;OOP的基本特點7類和對象C+語言程序設(shè)計抽象實例人數(shù)據(jù)抽象:char *name,char *gender,int age,int id代碼抽象:生物屬性角度:GetCloth(), Eat(), Step(),社會屬性角度:Work(), Promote() ,OOP的基本特點8類和對象C+語言程序設(shè)計封裝將抽象出的數(shù)據(jù)成員、代碼成員相結(jié)合,將它們視為一個整體。目的是曾強安全性和簡化編程,使用者不必了解具體的實現(xiàn)細節(jié),而只需要通過外部接口,以特定的訪問權(quán)

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

5、行為標識統(tǒng)一,減少程序中標識符的個數(shù)。實現(xiàn):重載函數(shù)和虛函數(shù)見第8章OOP的基本特點12類和對象C+語言程序設(shè)計c+中的類類是具有相同屬性和行為的一組對象的集合,它為屬于該類的全部對象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和行為兩個主要部分。利用類可以實現(xiàn)數(shù)據(jù)的封裝、隱藏、繼承與派生。利用類易于編寫大型復(fù)雜程序,其模塊化程度比C中采用函數(shù)更高。類 和 對 象13類和對象C+語言程序設(shè)計類的聲明形式 類是一種用戶自定義類型,聲明形式:class 類名稱 public: 公有成員(外部接口) private: 私有成員 protected: 保護型成員類 和 對 象14類和對象C+語言程序設(shè)計公有類

6、型成員在關(guān)鍵字public后面聲明,它們是類與外部的接口,任何外部函數(shù)都可以訪問公有類型數(shù)據(jù)和函數(shù)。類 和 對 象15類和對象C+語言程序設(shè)計私有類型成員在關(guān)鍵字private后面聲明,只允許本類中的函數(shù)訪問,而類外部的任何函數(shù)都不能訪問。如果緊跟在類名稱的后面聲明私有成員,則關(guān)鍵字private可以省略。類 和 對 象16類和對象C+語言程序設(shè)計保護類型與private類似,其差別表現(xiàn)在繼承與派生時對派生類的影響不同,第七章講。類 和 對 象17類和對象C+語言程序設(shè)計類的成員class Clock public: void SetTime(int NewH, int NewM, int N

7、ewS); void ShowTime(); private: int Hour, Minute, Second;類 和 對 象成員數(shù)據(jù)成員函數(shù)18類和對象C+語言程序設(shè)計void Clock:SetTime(int NewH, int NewM, int NewS) Hour=NewH; Minute=NewM; Second=NewS;void Clock:ShowTime() coutHour:Minute:Second;19類和對象C+語言程序設(shè)計成員數(shù)據(jù)與一般的變量聲明相同,但需要將它放在類的聲明體中。類 和 對 象20類和對象C+語言程序設(shè)計成員函數(shù)在類中說明原型,可以在類外給出函

8、數(shù)體實現(xiàn),并在函數(shù)名前使用類名加以限定。也可以直接在類中給出函數(shù)體,形成內(nèi)聯(lián)成員函數(shù)。允許聲明重載函數(shù)和帶默認形參值的函數(shù)類 和 對 象21類和對象C+語言程序設(shè)計內(nèi)聯(lián)成員函數(shù)為了提高運行時的效率,對于較簡單的函數(shù)可以聲明為內(nèi)聯(lián)形式。內(nèi)聯(lián)函數(shù)體中不要有復(fù)雜結(jié)構(gòu)(如循環(huán)語句和switch語句)。在類中聲明內(nèi)聯(lián)成員函數(shù)的方式:將函數(shù)體放在類的聲明中。使用inline關(guān)鍵字。類 和 對 象22類和對象C+語言程序設(shè)計內(nèi)聯(lián)成員函數(shù)舉例(一)class Point public: void Init(int initX,int initY) X=initX; Y=initY; int GetX() re

9、turn X; int GetY() return Y; private: int X,Y;類 和 對 象23類和對象C+語言程序設(shè)計內(nèi)聯(lián)成員函數(shù)舉例(二)class Point public: void Init(int initX,int initY); int GetX(); int GetY(); private: int X,Y;類 和 對 象24類和對象C+語言程序設(shè)計inline void Point: Init(int initX,int initY) X=initX; Y=initY;inline int Point:GetX() return X;inline int Po

10、int:GetY() return Y;25類和對象C+語言程序設(shè)計對象類的對象是該類的某一特定實體,即類類型的變量。聲明形式: 類名 對象名;例: Clock myClock;類 和 對 象26類和對象C+語言程序設(shè)計類中成員的訪問方式類中成員互訪直接使用成員名類外訪問使用“對象名.成員名”方式訪問 public 屬性的成員類 和 對 象27類和對象C+語言程序設(shè)計例4-1類的應(yīng)用舉例#includeusing namespace std;class Clock ./類的聲明略/.類的實現(xiàn)略int main() Clock myClock; myClock.SetTime(8,30,30);

11、 myClock.ShowTime();類 和 對 象28類和對象C+語言程序設(shè)計構(gòu)造函數(shù)構(gòu)造函數(shù)的作用是在對象被創(chuàng)建時使用特定的值構(gòu)造對象,或者說將對象初始化為一個特定的狀態(tài)。在對象創(chuàng)建時由系統(tǒng)自動調(diào)用。如果程序中未聲明,則系統(tǒng)自動產(chǎn)生出一個默認形式的構(gòu)造函數(shù)允許為內(nèi)聯(lián)函數(shù)、重載函數(shù)、帶默認形參值的函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)29類和對象C+語言程序設(shè)計構(gòu)造函數(shù)舉例class Clockpublic:Clock(int NewH,int NewM,int NewS);/構(gòu)造函數(shù)void SetTime(int NewH,int NewM,int NewS);void ShowTime();priv

12、ate:int Hour,Minute,Second;構(gòu)造函數(shù)和析構(gòu)函數(shù)30類和對象C+語言程序設(shè)計構(gòu)造函數(shù)的實現(xiàn):Clock:Clock(int NewH, int NewM, int NewS)Hour= NewH;Minute= NewM;Second= NewS;建立對象時構(gòu)造函數(shù)的作用:int main() Clock c(0,0,0); /隱含調(diào)用構(gòu)造函數(shù),將初始值作為實參。 c.ShowTime();31類和對象C+語言程序設(shè)計拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),其形參為本類的對象引用。class 類名 public : 類名(形參);/構(gòu)造函數(shù) 類名(類名 &對象名)

13、;/拷貝構(gòu)造函數(shù) .;類名:類(類名 &對象名)/拷貝構(gòu)造函數(shù)的實現(xiàn) 函數(shù)體 構(gòu)造函數(shù)和析構(gòu)函數(shù)32類和對象C+語言程序設(shè)計拷貝構(gòu)造函數(shù)(例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;構(gòu)造函數(shù)和析構(gòu)函數(shù)33類和對象C+語言程序設(shè)計Point:Point (Point& p) X=p.X; Y=p.Y; cout拷貝構(gòu)造函數(shù)被調(diào)用endl;34類和對象C+語言程序設(shè)計拷貝

14、構(gòu)造函數(shù)(例4-2)當用類的一個對象去初始化該類的另一個對象時系統(tǒng)自動調(diào)用拷貝構(gòu)造函數(shù)實現(xiàn)拷貝賦值。int main() Point A(1,2); Point B(A); /拷貝構(gòu)造函數(shù)被調(diào)用 coutB.GetX()endl;構(gòu)造函數(shù)和析構(gòu)函數(shù)35類和對象C+語言程序設(shè)計拷貝構(gòu)造函數(shù)(例4-2)若函數(shù)的形參為類對象,調(diào)用函數(shù)時,實參賦值給形參,系統(tǒng)自動調(diào)用拷貝構(gòu)造函數(shù)。例如:void fun1(Point p) coutp.GetX()endl; int main() Point A(1,2); fun1(A); /調(diào)用拷貝構(gòu)造函數(shù) 構(gòu)造函數(shù)和析構(gòu)函數(shù)36類和對象C+語言程序設(shè)計拷貝構(gòu)造函

15、數(shù)(例4-2)當函數(shù)的返回值是類對象時,系統(tǒng)自動調(diào)用拷貝構(gòu)造函數(shù)。例如:Point fun2() Point A(1,2); return A; /調(diào)用拷貝構(gòu)造函數(shù)int main() Point B; B=fun2(); 構(gòu)造函數(shù)和析構(gòu)函數(shù)37類和對象C+語言程序設(shè)計默認的拷貝構(gòu)造函數(shù)如果程序員沒有為類聲明拷貝初始化構(gòu)造函數(shù),則編譯器自己生成一個默認的拷貝構(gòu)造函數(shù)。這個構(gòu)造函數(shù)執(zhí)行的功能是:用作為初始值的對象的每個數(shù)據(jù)成員的值,初始化將要建立的對象的對應(yīng)數(shù)據(jù)成員。構(gòu)造函數(shù)和析構(gòu)函數(shù)38類和對象C+語言程序設(shè)計析構(gòu)函數(shù)完成對象被刪除前的一些清理工作。在對象的生存期結(jié)束的時刻系統(tǒng)自動調(diào)用它,然后

16、再釋放此對象所屬的空間。如果程序中未聲明析構(gòu)函數(shù),編譯器將自動產(chǎn)生一個默認的析構(gòu)函數(shù)。構(gòu)造函數(shù)和析構(gòu)函數(shù)39類和對象C+語言程序設(shè)計構(gòu)造函數(shù)和析構(gòu)函數(shù)舉例#includeusing namespace std;class Point public: Point(int xx,int yy); Point(); /.其他函數(shù)原型 private: int X,int Y;構(gòu)造函數(shù)和析構(gòu)函數(shù)40類和對象C+語言程序設(shè)計Point:Point(int xx,int yy) X=xx; Y=yy;Point:Point()/.其他函數(shù)的實現(xiàn)略41類和對象C+語言程序設(shè)計類的應(yīng)用舉例(例4-3)一圓形游

17、泳池如圖所示,現(xiàn)在需在其周圍建一圓形過道,并在其四周圍上柵欄。柵欄價格為35元/米,過道造價為20元/平方米。過道寬度為3米,游泳池半徑由鍵盤輸入。要求編程計算并輸出過道和柵欄的造價。游泳池過道42類和對象C+語言程序設(shè)計#include using namespace std;const float PI = 3.14159;const float FencePrice = 35;const float ConcretePrice = 20;/聲明類Circle 及其數(shù)據(jù)和方法class Circle private: float radius; public: Circle(float r

18、); /構(gòu)造函數(shù) float Circumference() const; /圓周長 float Area() const; /圓面積;43類和對象C+語言程序設(shè)計/ 類的實現(xiàn)/ 構(gòu)造函數(shù)初始化數(shù)據(jù)成員radiusCircle:Circle(float r)radius=r/ 計算圓的周長float Circle:Circumference() const return 2 * PI * radius; / 計算圓的面積 float Circle:Area() const return PI * radius * radius;44類和對象C+語言程序設(shè)計void main () float

19、radius; float FenceCost, ConcreteCost; / 提示用戶輸入半徑 coutradius; / 聲明 Circle 對象 Circle Pool(radius); Circle PoolRim(radius + 3); 45類和對象C+語言程序設(shè)計 /計算柵欄造價并輸出 FenceCost=PoolRim.Circumference()*FencePrice; coutFencing Cost is ¥FenceCostendl; /計算過道造價并輸出 ConcreteCost=(PoolRim.Area()- Pool.Area()*ConcretePrice

20、; coutConcrete Cost is ¥ConcreteCostendl;運行結(jié)果Enter the radius of the pool: 10Fencing Cost is ¥2858.85Concrete Cost is ¥4335.3946類和對象C+語言程序設(shè)計組合的概念類中的成員數(shù)據(jù)是另一個類的對象??梢栽谝延谐橄蟮幕A(chǔ)上實現(xiàn)更復(fù)雜的抽象。類 的 組 合47類和對象C+語言程序設(shè)計舉例class Point private: float x,y; /點的坐標 public: Point(float h,float v); /構(gòu)造函數(shù) float GetX(void); /取

21、X坐標 float GetY(void); /取Y坐標 void Draw(void); /在(x,y)處畫點;/.函數(shù)的實現(xiàn)略類 的 組 合48類和對象C+語言程序設(shè)計class Line private: Point p1,p2; /線段的兩個端點 public: Line(Point a,Point b); /構(gòu)造函數(shù) Void Draw(void); /畫出線段;/.函數(shù)的實現(xiàn)略49類和對象C+語言程序設(shè)計類組合的構(gòu)造函數(shù)設(shè)計原則:不僅要負責對本類中的基本類型成員數(shù)據(jù)賦初值,也要對對象成員初始化。聲明形式:類名:類名(對象成員所需的形參,本類成員形參) :對象1(參數(shù)),對象2(參數(shù))

22、,. 本類初始化 類 的 組 合50類和對象C+語言程序設(shè)計類組合的構(gòu)造函數(shù)調(diào)用構(gòu)造函數(shù)調(diào)用順序:先調(diào)用內(nèi)嵌對象的構(gòu)造函數(shù)(按內(nèi)嵌時的聲明順序,先聲明者先構(gòu)造)。然后調(diào)用本類的構(gòu)造函數(shù)。(析構(gòu)函數(shù)的調(diào)用順序相反)若調(diào)用默認構(gòu)造函數(shù)(即無形參的),則內(nèi)嵌對象的初始化也將調(diào)用相應(yīng)的默認構(gòu)造函數(shù)。類 的 組 合51類和對象C+語言程序設(shè)計類的組合舉例(二)class Part /部件類 public: Part(); Part(int i); Part(); void Print(); private: int val;類 的 組 合52類和對象C+語言程序設(shè)計class Whole public:

23、 Whole(); Whole(int i,int j,int k); Whole(); void Print(); private: Part one; Part two; int date;53類和對象C+語言程序設(shè)計Whole:Whole() date=0;Whole:Whole(int i,int j,int k): two(i),one(j),date(k)/.其他函數(shù)的實現(xiàn)略54類和對象C+語言程序設(shè)計互相引用的兩個類class A public: void f(B b);class B public: void g(A a);編譯錯誤:ref.cpp(3) : error C20

24、61: syntax error : identifier B類 的 組 合55類和對象C+語言程序設(shè)計前向引用聲明class B; /前向引用聲明class A public: void f(B b);class B public: void g(A a);類 的 組 合56類和對象C+語言程序設(shè)計前向引用聲明類應(yīng)該先聲明,后使用如果需要在某個類的聲明之前,引用該類,則應(yīng)進行前向引用聲明。前向引用聲明只為程序引入一個標識符,但具體聲明在其他地方。類 的 組 合57類和對象C+語言程序設(shè)計前向引用聲明注意事項使用前向引用聲明雖然可以解決一些問題,但它并不是萬能的。需要注意的是,盡管使用了前向引

25、用聲明,但是在提供一個完整的類聲明之前,不能聲明該類的對象,也不能在內(nèi)聯(lián)成員函數(shù)中使用該類的對象。請看下面的程序段:class Fred; /前向引用聲明class Barney Fred x; /錯誤:類Fred的聲明尚不完善;class Fred Barney y;類 的 組 合58類和對象C+語言程序設(shè)計前向引用聲明注意事項應(yīng)該記?。寒斈闶褂们跋蛞寐暶鲿r,你只能使用被聲明的符號,而不能涉及類的任何細節(jié)。類 的 組 合59類和對象C+語言程序設(shè)計UML簡介UML語言是一種可視化的的面向?qū)ο蠼UZ言。UML有三個基本的部分事物(Things)UML中重要的組成部分,在模型中屬于最靜態(tài)的部分

26、,代表概念上的或物理上的元素關(guān)系(Relationships)關(guān)系把事物緊密聯(lián)系在一起圖(Diagrams)圖是很多有相互相關(guān)的事物的組UML圖形標識60類和對象C+語言程序設(shè)計UML中有4種類型的事物結(jié)構(gòu)事物(Structural things)動作事物(Behavioral things)分組事物(Grouping things)注釋事物(Annotational things)UML圖形標識61類和對象C+語言程序設(shè)計UML中的關(guān)系依賴(Dependencies) 關(guān)聯(lián)(Association) 泛化(Generalization) 實現(xiàn)(Realization)UML圖形標識62類和對象C+語言程序設(shè)計UML中的9

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論