




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1,本章主要內(nèi)容*,面向?qū)ο蟮乃枷?OOP及其基本特點 類概念和聲明 對象 構(gòu)造函數(shù) 析構(gòu)函數(shù),拷貝構(gòu)造函數(shù) 內(nèi)聯(lián)成員函數(shù) 類的聚集 靜態(tài)成員 友元 this,1,2,回顧:面向過程的設計方法,重點: 如何實現(xiàn)細節(jié)過程,將數(shù)據(jù)與函數(shù)分開。 形式: 主模塊+若干個子模塊(main( )+子函數(shù))。 特點: 自頂向下,逐步求精功能分解。 缺點: 效率低,可維護性差,可重用性差。,一 面向?qū)ο蟮乃枷?2,3,面向?qū)ο蟮姆椒?目的: 高效快捷地實現(xiàn)軟件設計的產(chǎn)業(yè)化。 觀點: 自然界是由實體(對象)所組成。 程序設計方法: 使用面向?qū)ο蟮挠^點來描述模仿并處理現(xiàn)實問題。 要求: 高度概括、分類、和抽象。,
2、面向?qū)ο蟮乃枷?3,面向?qū)ο?Object Oriented, OO)是當前計算機界關(guān)心的重點,它是20世紀90年代以來軟件開發(fā)方法的主流。面向?qū)ο蟮母拍詈蛻靡殉搅顺绦蛟O計和軟件開發(fā),擴展到很寬的范圍。如數(shù)據(jù)庫系統(tǒng)、交互式界面、應用結(jié)構(gòu)、應用平臺、分布式系統(tǒng)、網(wǎng)絡管理結(jié)構(gòu)、CAD技術(shù)、人工智能等領(lǐng)域。,面向?qū)ο蟮幕靖拍?面向?qū)ο蟮乃枷?4,對象:現(xiàn)實世界中的各種具體的或抽象的“事物” 簡單對象:簡單類型的對象。如int類型的常量或變量。 復雜對象:復雜類型的對象。如用class、struct和union定義的類型的常量或變量。,面向?qū)ο蟮幕靖拍?5,人類的定義: struct HUMA
3、NKIND char *name; double weight; public: void eat( ); void wear( ); void reside( ); void travel( ); ; 人類的實例:HUMANKIND Zhang;,面向?qū)ο蟮幕靖拍?6,7,面向?qū)ο蟪绦蛟O計(OOP),面向?qū)ο蟪绦蛟O計的四個階段:系統(tǒng)分析,系統(tǒng)設計,對象設計,對象實現(xiàn)。 系統(tǒng)分析:理解應用系統(tǒng)的定義及建立應用系統(tǒng)的對象模型。分析和發(fā)現(xiàn)對象,定義對象的屬性和內(nèi)部狀態(tài)變換,定義外部事件和對象之間的聯(lián)系及約束,最終建立應用系統(tǒng)的對象模型、動態(tài)模型及功能模型。 系統(tǒng)設計:確立對象模型的實現(xiàn)方法。分解
4、系統(tǒng),確定系統(tǒng)固有的并發(fā)性,分配處理器的任務,選擇數(shù)據(jù)存儲的管理手段,處理全局資源的訪問,確立應用系統(tǒng)的邊界。,二 OOP及其基本特點,7,8,面向?qū)ο蟪绦蛟O計的四個階段(續(xù)): 對象設計:將系統(tǒng)分析階段建立的三種模型轉(zhuǎn)換成類。將對象模型轉(zhuǎn)換為類的屬性,將動態(tài)模型轉(zhuǎn)換為類的方法,將功能模型轉(zhuǎn)換為主控或子控模塊。轉(zhuǎn)換對象模型時要考慮對象關(guān)聯(lián);轉(zhuǎn)換動態(tài)模型應選用事件驅(qū)動;轉(zhuǎn)換功能模型時用順序或事件驅(qū)動實現(xiàn)流程控制。 對象實現(xiàn):用面向?qū)ο蟮某绦蛟O計語言實現(xiàn)對象設計階段定義的類。選擇合適的程序語言及開發(fā)環(huán)境,定義類的屬性及其方法,編寫主控模塊及子控模塊,針對具體語言進行性能調(diào)整。,面向?qū)ο蟪绦蛟O計(O
5、OP),二 OOP及其基本特點,8,9,抽象,抽象是對具體對象(問題)進行概括,抽出這一類對象的公共性質(zhì)并加以描述的過程。 先注意問題的本質(zhì)及描述,其次是實現(xiàn)過程或細節(jié)。 屬性抽象:描述某類對象的屬性或狀態(tài)(對象相互區(qū)別的物理量)。 行為抽象:描述某類對象的共有的行為特征或具有的功能。 抽象的實現(xiàn):通過類的聲明。,OOP的基本特點,9,10,抽象實例鐘表,屬性抽象: int Hour, int Minute, int Second 行為抽象: setTime( ), showTime( ),OOP的基本特點,10,11,抽象實例鐘表類,class Clock public: void setT
6、ime(int NewH, int NewM, int NewS); void showTime( ); private: int Hour,Minute,Second; ;,OOP的基本特點,11,12,抽象實例人,屬性抽象: char *name,char *sex,int age,int id 行為抽象: 生物屬性角度:getCloth( ), eat( ), step( ), 社會屬性角度:work( ), promote( ) ,OOP的基本特點,12,13,封裝,將抽象出的屬性成員、行為成員相結(jié)合,將它們視為一個整體。 目的是增強安全性和簡化編程,使用者不必了解具體的實現(xiàn)細節(jié),而只
7、需要通過外部接口,以特定的訪問權(quán)限,來使用類的成員。 實現(xiàn)封裝:類聲明中的,OOP的基本特點,13,14,封裝,實例: class Clock public: void setTime(int NewH,int NewM, int NewS); void showTime( ); private: int Hour,Minute,Second; ;,特定的訪問權(quán)限,OOP的基本特點,14,15,繼承與派生,是C+中支持層次分類的一種機制,允許程序員在保持原有類特性的基礎(chǔ)上,進行更具體的說明。 實現(xiàn):聲明派生類,OOP的基本特點,15,16,多態(tài)性,多態(tài):同一名稱,不同的功能實現(xiàn)方式。 目的:達
8、到行為標識統(tǒng)一,減少程序中標識符的個數(shù)。 實現(xiàn):重載函數(shù)和虛函數(shù),OOP的基本特點,16,17,OOP的基本特點,OOP的四個基本特征(小結(jié)): 抽象 封裝 繼承 多態(tài),對具體對象(問題)進行概括,抽出這一類對象的公共性質(zhì)并加以描述的過程。,將抽象出的數(shù)據(jù)及方法結(jié)合為一個整體的信息隱蔽技術(shù)。,對具有層次關(guān)系的類的數(shù)據(jù)和操作進行共享的一種方式。,不同的對象接受同一消息時產(chǎn)生不同的行動的現(xiàn)象。,17,18,c+中的類,類是具有相同屬性和行為的一組對象的集合,它為屬于該類的全部對象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和行為兩個主要部分。 利用類可以實現(xiàn)數(shù)據(jù)的封裝、隱藏、繼承與派生。 利用類易于編寫大
9、型復雜程序,其模塊化程度比C中采用函數(shù)更高。,三 類 和 對 象,18,19,類的聲明形式,類是一種用戶自定義類型,聲明形式: class 類名稱 public: 公有成員(外部接口) private: 私有成員 protected: 保護型成員 ,類 和 對 象,19,20,公有類型成員,在關(guān)鍵字public后面聲明,它們是類與外部的接口,任何外部函數(shù)都可以訪問公有類型數(shù)據(jù)和函數(shù)。,20,21,私有類型成員,在關(guān)鍵字private后面聲明,只允許本類中的函數(shù)訪問,而類外部的任何函數(shù)都不能訪問。 如果緊跟在類名稱的后面聲明私有成員,則關(guān)鍵字private可以省略。,21,22,保護類型,與pr
10、ivate類似,其差別表現(xiàn)在繼承與派生時對派生類的影響不同,后面章講。,22,23,類的成員,class Clock public: void setTime(int NewH, int NewM, int NewS); void showTime( ); private: int Hour, Minute, Second; ;,類 和 對 象,成員變量,成員函數(shù),23,void Clock : setTime(int NewH, int NewM, int NewS) Hour=NewH; Minute=NewM; Second=NewS; void Clock : showTime( )
11、coutHour:Minute:Second; ,24,25,成員變量,與一般的變量聲明相同,但需要將它放在類的聲明體中。,25,26,成員函數(shù),在類中說明原形,可以在類外給出函數(shù)體實現(xiàn),并在函數(shù)名前使用類名加以限定。也可以直接在類中給出函數(shù)體,形成內(nèi)聯(lián)成員函數(shù)。 允許聲明重載函數(shù)和帶缺省形參值的函數(shù),26,27,內(nèi)聯(lián)成員函數(shù),為了提高運行時的效率,對于較簡單的函數(shù)可以聲明為內(nèi)聯(lián)形式。 內(nèi)聯(lián)函數(shù)體中不要有復雜結(jié)構(gòu)(如循環(huán)語句和switch語句)。 在類中聲明內(nèi)聯(lián)成員函數(shù)的方式: 將函數(shù)體放在類的聲明中。 使用inline關(guān)鍵字。,類 和 對 象,27,28,內(nèi)聯(lián)成員函數(shù)舉例(一),class
12、Point public: inline void init( int initX,int initY) x=initX; y=initY; inline int getX( ) return x; inline int getY( ) return y; private: int x,y; ;,類 和 對 象,28,29,內(nèi)聯(lián)成員函數(shù)舉例(二),class Point public: inline void init(int initX, int initY); inline int getX( ); inline int getY( ); private: int x,y; ;,類 和 對
13、 象,29,inline void Point: Init(int initX,int initY) X=initX; Y=initY; inline int Point:getX( ) return X; inline int Point:getY( ) return Y; ,30,31,對象,類的對象是該類的某一特定實體,即類類型的變量。 聲明形式: 類名 對象名; 例: Clock myClock;,類 和 對 象,31,32,類中成員的訪問方式,類中成員互訪 直接使用成員名 類外訪問 使用“對象名.成員名”方式訪問 public 屬性的成員,類 和 對 象,32,33,例4-1 類的應
14、用舉例,#include class Clock ./類的聲明略 /.類的實現(xiàn)略 void main(void) Clock myClock; myClock.setTime(8,30,30); myClock.showTime( ); ,類 和 對 象,33,34,構(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ù),34,35,構(gòu)造函數(shù)舉例,class Clock public: Clock
15、(int NewH, int NewM, int NewS);/構(gòu)造函數(shù) void setTime(int NewH, int NewM, int NewS); void showTime( ); private: int Hour,Minute,Second; ;,構(gòu)造函數(shù)和析構(gòu)函數(shù),35,構(gòu)造函數(shù)的實現(xiàn): Clock:Clock(int NewH, int NewM, int NewS) Hour=H; Minute=M; Second=S; 建立對象時構(gòu)造函數(shù)的作用: void main( ) Clock c (0,0,0); /隱含調(diào)用構(gòu)造函數(shù),將初始值作為實參。 c.showTime
16、( ); ,36,37,拷貝構(gòu)造函數(shù),拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),其形參為本類的對象引用。 class 類名 public : 類名(形參);/構(gòu)造函數(shù) 類名(類名 y=yy; Point(const Point,構(gòu)造函數(shù)和析構(gòu)函數(shù),38,Point:Point (const Point ,39,40,例4-2 拷貝構(gòu)造函數(shù)舉例,當用類的一個對象去初始化該類的另一個對象時系統(tǒng)自動調(diào)用它實現(xiàn)拷貝賦值。 void main(void) Point A(1,2); Point B(A); /拷貝構(gòu)造函數(shù)被調(diào)用 coutB.getX( )endl; ,構(gòu)造函數(shù)和析構(gòu)函數(shù),40,41,拷貝構(gòu)造函數(shù)
17、舉例(例4-2),若函數(shù)的形參為類對象,調(diào)用函數(shù)時,實參賦值給形參,系統(tǒng)自動調(diào)用拷貝構(gòu)造函數(shù)。例如: void fun1(Point p) coutp.getX( )endl; void main( ) Point A(1,2); fun1(A); /調(diào)用拷貝構(gòu)造函數(shù) ,構(gòu)造函數(shù)和析構(gòu)函數(shù),41,42,拷貝構(gòu)造函數(shù)舉例(例4-2),當函數(shù)的返回值是類對象時,系統(tǒng)自動調(diào)用拷貝構(gòu)造函數(shù)。例如: Point fun2( ) Point A(1,2); return A; /調(diào)用拷貝構(gòu)造函數(shù) void main( ) Point B; B=fun2( ); ,構(gòu)造函數(shù)和析構(gòu)函數(shù),42,43,拷貝構(gòu)造函
18、數(shù),如果程序員沒有為類聲明拷貝初始化構(gòu)造函數(shù),則編譯器自己生成一個拷貝構(gòu)造函數(shù)。 這個構(gòu)造函數(shù)執(zhí)行的功能是:用作為初始值的對象的每個數(shù)據(jù)成員的值,初始化將要建立的對象的對應數(shù)據(jù)成員。,構(gòu)造函數(shù)和析構(gòu)函數(shù),43,44,析構(gòu)函數(shù),完成對象被刪除前的一些清理工作。 在對象的生存期結(jié)束的時刻系統(tǒng)自動調(diào)用它,然后再釋放此對象所屬的空間。 如果程序中未聲明析構(gòu)函數(shù),編譯器將自動產(chǎn)生一個缺省的析構(gòu)函數(shù)。,構(gòu)造函數(shù)和析構(gòu)函數(shù),44,45,構(gòu)造函數(shù)和析構(gòu)函數(shù)舉例,#include class Point public: Point(int xx,int yy); Point( ); /.其它函數(shù)原形 priva
19、te: int x,int y; ;,構(gòu)造函數(shù)和析構(gòu)函數(shù),45,Point:Point(int xx,int yy) x=xx; y=yy; Point:Point( ) /.其它函數(shù)的實現(xiàn)略,46,47,例4-3 類的應用舉例,鍵盤輸入多個點數(shù)據(jù),并計算這些點順次連成的折線的總長度。,double calculateDistance( Point ,47,48,49,組合的概念,組合:類中的成員變量是另一個類的對象。,類 的 組 合,49,50,舉例,類 的 組 合,class Line private: Point p1,p2; /線段的兩個端點 public: Line(Point a,
20、Point b); /構(gòu)造函數(shù) Void Draw(void); /畫出線段 ; /.函數(shù)的實現(xiàn)略,50,51,類組合的構(gòu)造函數(shù)設計,原則:不僅要負責對本類中的基本類型成員變量賦初值,也要對對象成員初始化。 聲明形式: 類名:類名(對象成員所需的形參,本類成員形參) :對象1(參數(shù)),對象2(參數(shù)),. 本類初始化 ,類 的 組 合,51,52,類組合的構(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)用相應的缺省構(gòu)造函數(shù)。,類 的 組 合
21、,52,53,類的組合舉例(二),class Part /部件類 public: Part( ); Part(int i); Part( ); void Print( ); private: int val; ;,類 的 組 合,53,class Whole public: Whole( ); Whole(int i,int j,int k); Whole( ); void Print( ); private: Part one; Part two; int date; ;,54,Whole:Whole( )/調(diào)用Part的默認構(gòu)造函數(shù) date=0; Whole:Whole(int i,in
22、t j,int k): two(i),one(j),date(k) /調(diào)用Part的帶參數(shù)構(gòu)造函數(shù) /.其它函數(shù)的實現(xiàn)略,55,56,前向引用聲明,類應該先聲明,后使用; 如果需要在某個類的聲明之前,引用該類,則應進行前向引用聲明。 前向引用聲明只為程序引入一個標識符,但具體聲明在其它地方。,56,57,前向引用聲明舉例,class B; /前向引用聲明 class A public: void f(B b); ; class B public: void g(A a); ;,57,58,聲明及用途,template 類聲明 使用類模板使用戶可以為類聲明一種模式,使得類中的某些數(shù)據(jù)成員、某些成
23、員函數(shù)的參數(shù)、某些成員函數(shù)的返回值,能取任意類型(包括系統(tǒng)預定義的和用戶自定義的)。,類 模 板,58,59,例4-4 類模板應用舉例,類 模 板,鍵盤輸入多個點數(shù)據(jù),并計算這些點順次連成的折線的總長度。(與例4-3功能一樣,但是點的數(shù)據(jù)類型要采用float實現(xiàn),是否需要再設計一個類型為float的Point對象呢?),59,60,61,62,靜態(tài)成員,需要為某個類的所有對象分配一個共享存儲空間。 C語言采用全局變量來解決,但這種做法不安全,容易重名。 C+中采用靜態(tài)成員的方式來實現(xiàn),可以把一個成員變量定義成靜態(tài)的,這樣不管定義多少個對象,這個靜態(tài)成員只有一個實例。并被所有對象所共享。 靜態(tài)成
24、員包括:靜態(tài)成員變量和靜態(tài)成員函數(shù),靜態(tài)成員,62,63,靜態(tài)成員,63,64,靜態(tài)成員的初始化與調(diào)用,靜態(tài)成員,:,:(參數(shù)列表),64,靜態(tài)成員,在類定義時,使用關(guān)鍵字static可將成員(數(shù)據(jù)成員和函數(shù)成員)定義為靜態(tài)成員。 特征是不管這個類創(chuàng)建了多少個對象,其靜態(tài)成員只有一個副本,這個副本被所有的對象共享。(不是獨有的),靜態(tài)數(shù)據(jù)成員,靜態(tài)函數(shù)成員,65,靜態(tài)數(shù)據(jù)成員的初始化,靜態(tài)數(shù)據(jù)成員必須進行初始化。在程序一開始運行時靜態(tài)數(shù)據(jù)成員就必須存在,因為在程序運行中要調(diào)用,所以靜態(tài)數(shù)據(jù)成員不能在任何函數(shù)內(nèi)分配空間和初始化。最好在類的實現(xiàn)部分中完成靜態(tài)數(shù)據(jù)成員的初始化。 靜態(tài)數(shù)據(jù)成員初始化與
25、一般數(shù)據(jù)成員初始化不同,其格式如下:, :=;,66,靜態(tài)成員的調(diào)用,調(diào)用公有靜態(tài)成員時,可采用如下格式之一: : 對象. 對象指針-靜態(tài)成員,67,靜態(tài)函數(shù)成員,靜態(tài)成員函數(shù)屬于整個類,此類所有對象所共享的成員函數(shù)。 使用公有靜態(tài)成員函數(shù)的調(diào)用方式,類名 : 靜態(tài)成員函數(shù)(實參表); 對象名 . 靜態(tài)成員函數(shù)(實參表); 對象指針 - 靜態(tài)成員函數(shù)(實參表);,68,注意: 靜態(tài)成員函數(shù)可以直接訪問該類的靜態(tài)數(shù)據(jù)和靜態(tài)函數(shù)成員 但由于靜態(tài)成員函數(shù)不屬于某一個特定的對象,因此它不能隨意訪問類的非靜態(tài)數(shù)據(jù)成員,69,a=2, b=16 a=4, b=16 ?,70,71,友元,根據(jù)封裝性,一般將類中的數(shù)據(jù)成員聲明為私有成員,外部可以通過類的公有成員函數(shù)對私有成員進行訪問。 但有時類體外的一些函數(shù)需要直接訪問類的數(shù)據(jù)成員,又不改變其數(shù)據(jù)成員的訪問權(quán)限,這時,需要定義友元。,友元,71,72,友元的作
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 泉州工程職業(yè)技術(shù)學院《過程控制專業(yè)實驗》2023-2024學年第二學期期末試卷
- 泉州紡織服裝職業(yè)學院《注冊電氣工程師概論》2023-2024學年第二學期期末試卷
- 上??萍即髮W《會計制度設計》2023-2024學年第二學期期末試卷
- 商丘師范學院《信息安全攻防對抗實訓》2023-2024學年第二學期期末試卷
- 興安職業(yè)技術(shù)學院《機器學習與人工智能導論》2023-2024學年第二學期期末試卷
- 3《植物媽媽有辦法》教學設計-2024-2025學年統(tǒng)編版語文二年級上冊
- 人教版七年級歷史與社會下冊6.4.2-高原圣城-拉薩教學設計
- 河池2025年廣西河池市事業(yè)單位招聘731人筆試歷年參考題庫附帶答案詳解
- 7微生物與健康 教學設計 -2023-2024學年科學六年級上冊教科版
- 揚州環(huán)境資源職業(yè)技術(shù)學院《田徑教學與實踐》2023-2024學年第二學期期末試卷
- 一通三防培訓課件PPT課件(PPT 53頁)
- 江蘇省邳州市2021-2022學年人教版四年級上冊期末數(shù)學試卷(含答案)
- 大數(shù)據(jù)分析及應用實踐全書課件匯總整本書電子教案(最新)
- 教練技術(shù)一階段講義(共59頁)
- 第3章-系統(tǒng)模型與模型化
- 精品課程建設驗收自評報告
- 福建省義務教育課程設置及比例(修訂)
- 未成年人需辦銀行卡證明(模板)
- 建設項目職業(yè)病防護設施設計專篇編制導則
- 員工考勤流程圖
- 出口加工區(qū)外匯管理培訓(ppt49)
評論
0/150
提交評論