




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、類與對象類與對象C+語言程序設計2主要內容主要內容l面向對象的思想面向對象的思想lOOP的基本特點的基本特點l類概念和聲明類概念和聲明l對象對象l構造函數構造函數l析構函數析構函數l內聯(lián)成員函數內聯(lián)成員函數l拷貝構造函數拷貝構造函數l類的組合類的組合3面向過程的設計方法面向過程的設計方法l重點重點: :如何實現的細節(jié)和過程,將數據與函數分開。l形式:形式:主模塊+若干個子模塊(main()+子函數)。l特點:特點:自頂向下,逐步求精功能分解。l缺點:缺點:效率低,程序的可重用性差。面向對象的思想4面向對象的方法面向對象的方法l目的:目的: 實現軟件設計的產業(yè)化。l觀點:觀點: 自然界是由實體(
2、對象)所組成。l程序設計方法:程序設計方法: 使用面向對象的觀點來描述模仿并處理現實問題。l要求:要求: 高度概括、分類、和抽象。面向對象的思想5抽象抽象抽象是對具體對象(問題)進行概括,抽象是對具體對象(問題)進行概括,抽出這一類對象的公共性質并加以描述抽出這一類對象的公共性質并加以描述的過程。的過程。 先注意問題的本質及描述,其次是實現過程或細節(jié)。 數據抽象:描述某類對象的屬性或狀態(tài)(對象相互區(qū)別的物理量)。 代碼抽象:描述某類對象的共有的行為特征或具有的功能。 抽象的實現:通過類的聲明。OOP的基本特點6抽象實例抽象實例鐘表鐘表l數據抽象:數據抽象:int Hour,int Minute
3、,int Secondl代碼抽象:代碼抽象:SetTime(),ShowTime()OOP的基本特點7抽象實例抽象實例鐘表類鐘表類class Clock public: void SetTime(int NewH,int NewM,int NewS); void ShowTime(); private: int Hour,Minute,Second;OOP的基本特點8抽象實例抽象實例人人l數據抽象:數據抽象:char *name,char *gender,int age,int idl代碼抽象:代碼抽象:生物屬性角度:GetCloth(), Eat(), Step(),社會屬性角度:Work(
4、), Promote() ,OOP的基本特點9封裝封裝將抽象出的數據成員、代碼成員相結將抽象出的數據成員、代碼成員相結合,將它們視為一個整體。合,將它們視為一個整體。目的是曾強安全性和簡化編程,使用者不必了解具體的實現細節(jié),而只需要通過外部接口,以特定的訪問權限,來使用類的成員。實現封裝:類聲明中的OOP的基本特點10封裝封裝l實例:實例:class Clock public:void SetTime(int NewH,int NewM, int NewS); void ShowTime(); private: int Hour,Minute,Second;邊界特定的訪問權限OOP的基本特點外
5、部接口11繼承與派生繼承與派生是是C+中支持層次分類的一種機制,中支持層次分類的一種機制,允許程序員在保持原有類特性的基礎上,允許程序員在保持原有類特性的基礎上,進行更具體的說明。進行更具體的說明。實現:聲明派生類實現:聲明派生類OOP的基本特點12多態(tài)性多態(tài)性l多態(tài):同一名稱,不同的功能實現方式。多態(tài):同一名稱,不同的功能實現方式。l目的:達到行為標識統(tǒng)一,減少程序中標目的:達到行為標識統(tǒng)一,減少程序中標識符的個數。識符的個數。l實現:重載函數和虛函數實現:重載函數和虛函數OOP的基本特點13c+中的類中的類l類是具有相同屬性和行為的一組對象類是具有相同屬性和行為的一組對象的集合,它為屬于該
6、類的全部對象提的集合,它為屬于該類的全部對象提供了統(tǒng)一的抽象描述,其內部包括屬供了統(tǒng)一的抽象描述,其內部包括屬性和行為兩個主要部分。性和行為兩個主要部分。l利用類可以實現數據的封裝、隱藏、利用類可以實現數據的封裝、隱藏、繼承與派生。繼承與派生。l利用類易于編寫大型復雜程序,其模利用類易于編寫大型復雜程序,其模塊化程度比塊化程度比C中采用函數更高。中采用函數更高。類 和 對 象14類的聲明形式類的聲明形式 類是一種用戶自定義類型,聲明形式:類是一種用戶自定義類型,聲明形式:class 類名稱 public: 公有成員(外部接口) private: 私有成員 protected: 保護型成員類 和
7、 對 象15公有類型成員公有類型成員在關鍵字在關鍵字public后面聲明,它們是類后面聲明,它們是類與外部的接口,任何外部函數都可以訪與外部的接口,任何外部函數都可以訪問公有類型數據和函數。問公有類型數據和函數。類 和 對 象16私有類型成員私有類型成員在關鍵字在關鍵字private后面聲明,后面聲明,只允許只允許本類中的函數訪問,而類外部的任何函本類中的函數訪問,而類外部的任何函數都不能訪問。數都不能訪問。如果如果緊跟在類名稱的后面聲明私有成員,緊跟在類名稱的后面聲明私有成員,則則關鍵字關鍵字privateprivate可以可以省略。省略。類 和 對 象17保護類型保護類型與與private
8、類似,其差別表現在繼承與類似,其差別表現在繼承與派生時對派生類的影響不同。派生時對派生類的影響不同。類 和 對 象18類的成員類的成員class Clock public: void SetTime(int NewH, int NewM, int NewS); void ShowTime(); private: int Hour, Minute, Second;類 和 對 象成員數據成員函數void Clock:SetTime(int NewH, int NewM,void Clock:SetTime(int NewH, int NewM, int NewS) int NewS) Hour=N
9、ewH; Hour=NewH; Minute=NewM; Minute=NewM; Second=NewS; Second=NewS; void Clock:ShowTime()void Clock:ShowTime() coutHour:Minute:Second; coutHour:Minute:Second; 1920成員數據成員數據l與一般的變量聲明相同,但需要將它與一般的變量聲明相同,但需要將它放在類的聲明體中。放在類的聲明體中。類 和 對 象21成員函數成員函數l在類中說明原型,可以在類外給出函在類中說明原型,可以在類外給出函數體實現,并在函數名前使用類名加數體實現,并在函數名前使
10、用類名加以限定。也可以直接在類中給出函數以限定。也可以直接在類中給出函數體,形成內聯(lián)成員函數。體,形成內聯(lián)成員函數。l允許聲明重載函數和帶默認形參值的允許聲明重載函數和帶默認形參值的函數函數類 和 對 象22內聯(lián)成員函數內聯(lián)成員函數l為了提高運行時的效率,對于較簡單為了提高運行時的效率,對于較簡單的函數可以聲明為內聯(lián)形式。的函數可以聲明為內聯(lián)形式。l內聯(lián)函數體中不要有復雜結構(如循內聯(lián)函數體中不要有復雜結構(如循環(huán)語句和環(huán)語句和switch語句)。語句)。l在類中聲明內聯(lián)成員函數的方式:在類中聲明內聯(lián)成員函數的方式: 將函數體放在類的聲明中。 使用inline關鍵字。類 和 對 象23內聯(lián)成員
11、函數舉例內聯(lián)成員函數舉例(一一)class Pointclass Point public: public: void Init(int initX,int initY) void Init(int initX,int initY) X=initX; X=initX; Y=initY; Y=initY; int GetX() int GetX() return X;return X; int GetY() int GetY() return Y;return Y; private: private: int X,Y; int X,Y;類 和 對 象24內聯(lián)成員函數舉例內聯(lián)成員函數舉例(二二)c
12、lass Pointclass Point public: public: void Init(int initX,int initY); void Init(int initX,int initY); int GetX() int GetX(); int GetY()int GetY(); private:private: int X,Y; int X,Y;類 和 對 象inlineinline void Point: void Point: Init(int initX,int initY) Init(int initX,int initY) X=initX; X=initX; Y=ini
13、tY; Y=initY; inlineinline int Point:GetX() int Point:GetX() return X; return X; inlineinline int Point:GetY() int Point:GetY() return Y; return Y; 2526對象對象l類的對象是該類的某一特定實體,即類的對象是該類的某一特定實體,即類類型的變量。類類型的變量。l聲明形式:聲明形式: 類名類名 對象名;對象名;l例:例: Clock myClock;Clock myClock;類 和 對 象27類中成員的訪問方式類中成員的訪問方式l類中成員互訪類中成員互
14、訪 直接使用成員名l類外訪問類外訪問 使用“對象名.成員名”方式訪問 public 屬性的成員類 和 對 象28例例1-1類的應用舉例類的應用舉例#include#includeusing namespace std;using namespace std;class Clockclass Clock ./ ./類的聲明略類的聲明略 /./.類的實現略類的實現略int main()int main() Clock Clock myClockmyClock; ; myClock.SetTimemyClock.SetTime(8,30,30);(8,30,30); myClock.ShowTime
15、myClock.ShowTime();(); 類 和 對 象29構造函數構造函數l構造函數的作用是在對象被創(chuàng)建時使構造函數的作用是在對象被創(chuàng)建時使用特定的值構造對象,或者說將對象用特定的值構造對象,或者說將對象初始化初始化為一個特定的狀態(tài)。為一個特定的狀態(tài)。l在對象創(chuàng)建時在對象創(chuàng)建時由系統(tǒng)自動調用由系統(tǒng)自動調用。l如果程序中未聲明,則系統(tǒng)自動產生如果程序中未聲明,則系統(tǒng)自動產生出一個出一個默認形式默認形式的構造函數的構造函數l允許為允許為內聯(lián)內聯(lián)函數、函數、重載重載函數、函數、帶默認帶默認形參值形參值的函數的函數構造函數和析構函數30構造函數舉例構造函數舉例class Clockclass C
16、lock public:public:Clock(int NewH,int NewM,int NewS);/Clock(int NewH,int NewM,int NewS);/構造函數構造函數void SetTime(int NewH,int NewM,int NewS);void SetTime(int NewH,int NewM,int NewS);void ShowTime();void ShowTime();private:private:int Hour,Minute,Second;int Hour,Minute,Second;構造函數和析構函數構造函數的實現:構造函數的實現:Cl
17、ock:Clock(int NewH, int NewM, int NewS)Clock:Clock(int NewH, int NewM, int NewS) Hour= NewH;Hour= NewH;Minute= NewM;Minute= NewM;Second= NewS;Second= NewS; 建立對象時構造函數的作用:建立對象時構造函數的作用:int main()int main() Clock c(0,0,0); Clock c(0,0,0); /隱含調用構造函數,將初始值作為實參。隱含調用構造函數,將初始值作為實參。 c.ShowTime();c.ShowTime();
18、3132拷貝構造函數拷貝構造函數拷貝構造函數是一種特殊的構造函數,其形參為本拷貝構造函數是一種特殊的構造函數,其形參為本類的對象引用。類的對象引用。class 類名 public : 類名(形參);/構造函數 類名(類名 &對象名);/拷貝構造函數 .;類名:類(類名 &對象名)/拷貝構造函數的實現 函數體 構造函數和析構函數33拷貝構造函數拷貝構造函數(例例1-2)class Point public: Point(int xx=0,int yy=0)X=xx; Y=yy; Point(Point& p); int GetX() return X; int GetY(
19、) return Y; private: int X,Y;構造函數和析構函數Point:Point (Point& p)Point:Point (Point& p) X=p.X; X=p.X; Y=p.Y; Y=p.Y; cout cout拷貝構造函數被調用拷貝構造函數被調用endl;endl; 3435拷貝構造函數拷貝構造函數(例例1-2)l當用類的一個對象去初始化該類的另一當用類的一個對象去初始化該類的另一個對象時系統(tǒng)自動調用拷貝構造函數實個對象時系統(tǒng)自動調用拷貝構造函數實現拷貝賦值。現拷貝賦值。int main()int main() Point A(1,2); Poin
20、t A(1,2); Point B(A); / Point B(A); /拷貝構造函數被調用拷貝構造函數被調用 coutB.GetX()endl;coutB.GetX()endl; 構造函數和析構函數36拷貝構造函數拷貝構造函數(例例1-2)l若函數的形參為類對象,調用函數時,若函數的形參為類對象,調用函數時,實參賦值給形參,系統(tǒng)自動調用拷貝實參賦值給形參,系統(tǒng)自動調用拷貝構造函數。例如:構造函數。例如:void fun1(Point p)void fun1(Point p) coutp.GetX()endl; coutp.GetX()endl; int main()int main() Po
21、int A(1,2); Point A(1,2); fun1(A); / fun1(A); /調用拷貝構造函數調用拷貝構造函數 構造函數和析構函數37拷貝構造函數拷貝構造函數(例例1-2)l當函數的返回值是類對象時,系統(tǒng)自動調當函數的返回值是類對象時,系統(tǒng)自動調用拷貝構造函數。例如:用拷貝構造函數。例如:Point fun2()Point fun2() Point A(1,2); Point A(1,2); return A; / return A; /調用拷貝構造函數調用拷貝構造函數 int main()int main() Point B; Point B; B=fun2(); B=fun
22、2(); 構造函數和析構函數38默認的拷貝構造函數默認的拷貝構造函數如果程序員沒有為類聲明拷貝初始如果程序員沒有為類聲明拷貝初始化構造函數,則編譯器自己生成一個默化構造函數,則編譯器自己生成一個默認的拷貝構造函數。認的拷貝構造函數。這個構造函數執(zhí)行的功能是:用作這個構造函數執(zhí)行的功能是:用作為初始值的對象的每個數據成員的值,為初始值的對象的每個數據成員的值,初始化將要建立的對象的對應數據成員。初始化將要建立的對象的對應數據成員。構造函數和析構函數39析構函數析構函數l完成對象被刪除前的一些清理工作。完成對象被刪除前的一些清理工作。l在對象的生存期結束的時刻系統(tǒng)自動在對象的生存期結束的時刻系統(tǒng)自
23、動調用它,然后再釋放此對象所屬的空調用它,然后再釋放此對象所屬的空間。間。l如果程序中未聲明析構函數,編譯器如果程序中未聲明析構函數,編譯器將自動產生一個默認的析構函數。將自動產生一個默認的析構函數。構造函數和析構函數40構造函數和析構函數舉例構造函數和析構函數舉例#include#includeusing namespace std;using namespace std;class Pointclass Point public: public: Point(int xx,int yy); Point(int xx,int yy); Point(); Point(); /. /.其他函數原
24、型其他函數原型 private:private: int X,int Y; int X,int Y;構造函數和析構函數Point:Point(int xx,int yy)Point:Point(int xx,int yy) X=xx; Y=yy; X=xx; Y=yy; Point:Point()Point:Point() /./.其他函數的實現略其他函數的實現略4142組合的概念組合的概念l類中的成員數據是另一個類的對象。類中的成員數據是另一個類的對象。l可以在已有抽象的基礎上實現更復雜可以在已有抽象的基礎上實現更復雜的抽象。的抽象。類 的 組 合43舉例舉例class Point priv
25、ate: float x,y; /點的坐標 public: Point(float h,float v); /構造函數 float GetX(void); /取X坐標 float GetY(void); /取Y坐標 void Draw(void); /在(x,y)處畫點;/.函數的實現略類 的 組 合class Lineclass Line private: private: Point p1,p2; / Point p1,p2; /線段的兩個端點線段的兩個端點 public:public: Line(Point a,Point b); / Line(Point a,Point b); /構造
26、函數構造函數 Void Draw(void); /Void Draw(void); /畫出線段畫出線段;/./.函數的實現略函數的實現略4445類組合的構造函數設計類組合的構造函數設計l原則:不僅要負責對本類中的基本類型成原則:不僅要負責對本類中的基本類型成員數據賦初值,也要對對象成員初始化。員數據賦初值,也要對對象成員初始化。l聲明形式:聲明形式:類名:類名(對象成員所需的形參,本類成員形參) :對象1(參數),對象2(參數),. 本類初始化 類 的 組 合46類組合的構造函數調用類組合的構造函數調用l構造函數調用順序:先調用內嵌對象構造函數調用順序:先調用內嵌對象的構造函數(按內嵌時的聲明
27、順序,的構造函數(按內嵌時的聲明順序,先聲明者先構造)。然后調用本類的先聲明者先構造)。然后調用本類的構造函數。(析構函數的調用順序相構造函數。(析構函數的調用順序相反)反)l若調用默認構造函數(即無形參的),若調用默認構造函數(即無形參的),則內嵌對象的初始化也將調用相應的則內嵌對象的初始化也將調用相應的默認構造函數。默認構造函數。類 的 組 合47類的組合舉例(二)類的組合舉例(二)class Part /class Part /部件類部件類 public:public: Part(); Part(); Part(int i); Part(int i); Part(); Part(); v
28、oid Print(); void Print(); private: private: int val; int val;類 的 組 合class Whole class Whole public: public: Whole(); Whole(); Whole(int i,int j,int k); Whole(int i,int j,int k); Whole(); Whole(); void Print(); void Print(); private: private: Part one; Part one; Part two; Part two; int date; int dat
29、e;48Whole:Whole()Whole:Whole() date=0; date=0; Whole:Whole(int i,int j,int k):Whole:Whole(int i,int j,int k): two(i),one(j),date(k) two(i),one(j),date(k)/./.其他函數的實現略其他函數的實現略4950前向引用聲明前向引用聲明l類應該先聲明,后使用類應該先聲明,后使用l如果需要在某個類的聲明之前,引用如果需要在某個類的聲明之前,引用該類,則應進行前向引用聲明。該類,則應進行前向引用聲明。l前向引用聲明只為程序引入一個標識前向引用聲明只為程序引入
30、一個標識符,但具體聲明在其他地方。符,但具體聲明在其他地方。類 的 組 合51前向引用聲明舉例前向引用聲明舉例class B; /class B; /前向引用聲明前向引用聲明class Aclass A public: public: void f(B b); void f(B b);class Bclass B public: public: void g(A a); void g(A a);類 的 組 合52UML簡介簡介lUMLUML語言是一種可視化的的面向對象建模語語言是一種可視化的的面向對象建模語言。言。lUMLUML有三個基本的部分有三個基本的部分事物(Things)UML中重要的
31、組成部分,在模型中屬于最靜態(tài)的部分,代表概念上的或物理上的元素關系(Relationships)關系把事物緊密聯(lián)系在一起圖(Diagrams)圖是很多有相互相關的事物的組UML圖形標識53UML中有中有4種類型的事物種類型的事物l結構事物(結構事物(Structural thingsStructural things)l動作事物(動作事物(Behavioral thingsBehavioral things)l分組事物(分組事物(Grouping thingsGrouping things)l注釋事物(注釋事物(Annotational thingsAnnotational things)UML圖形標識54UML中的關系中的關系l依賴(依賴(DependenciesDependencies) l關聯(lián)(關聯(lián)(AssociationAssociation) l泛化(泛化(GeneralizationGeneralization) l實現(實現(RealizationRealization)UML圖形標識55UML中的中的9種圖種圖l類圖(類圖(Class diagramClass diagram)l對象圖(對象圖(Object diagramObject diagram)l用例圖(用例圖(Use case diagramUse case diagr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 蕭山區(qū)無線門禁管理辦法
- 薪酬管理辦法整改通知書
- 蜀山區(qū)財稅費用管理辦法
- 衡水市人防車位管理辦法
- 醫(yī)療保障政策解讀課件
- 裝修公司管理層管理辦法
- 西安城中村環(huán)境管理辦法
- 計算機使用管理辦法制度
- 證監(jiān)會不良資產管理辦法
- 調研類費用管理辦法包括
- 食堂外人出入管理制度
- 家庭消毒知識課件
- 大數據驅動設備優(yōu)化設計-全面剖析
- 晉升環(huán)境主管述職報告
- 管理學基礎(第三版) 課件 徐洪燦 第1-5章 管理概述-組織與組織設計
- 國家開放大學行管??啤缎姓M織學》期末紙質考試總題庫(2025春期版)
- 中藥涂擦治療護理技術操作規(guī)范
- 《大金智能控制系統(tǒng)》課件
- 北師大版四年級下冊數學口算題1000道帶答案
- AAMIST79-2017衛(wèi)生保健設施蒸汽滅菌和無菌保證綜合指南
- 高一下學期期末考試物理試題
評論
0/150
提交評論