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

下載本文檔

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

文檔簡介

1、C+程序設(shè)計2類和對象面向?qū)ο蟪绦蛟O(shè)計類與對象概述類類的聲明類的定義對象對象的聲明與成員訪問實例化對象對象的存儲this指針*類和對象的簡單應(yīng)用舉例提綱面向過程 VS. 面向?qū)ο蟪绦蛟O(shè)計面向過程程序設(shè)計研究過程是一種數(shù)學(xué)思維或計算機(jī)思維方法,與人們認(rèn)識世界的方法不同。主要是理解算法的處理思想和過程。面向?qū)ο蟪绦蛟O(shè)計研究對象是建立在認(rèn)識方法學(xué)基礎(chǔ)上的一項技術(shù)科學(xué),比較自然地模擬了人類認(rèn)識客觀世界的方式;主要是理解“構(gòu)件或組件”及其“組裝”的思想和過程。面向過程程序設(shè)計傳統(tǒng)的程序設(shè)計方法-面向過程程序設(shè)計的步驟為:對具體應(yīng)用問題進(jìn)行詳細(xì)的功能分析,然后將問題分解成若干個可實現(xiàn)的功能模塊;根據(jù)功能塊

2、的功能來設(shè)計一系列與功能相適宜的數(shù)據(jù),即設(shè)計“數(shù)據(jù)結(jié)構(gòu)”; 編寫一些過程或函數(shù)實現(xiàn)對這些數(shù)據(jù)所進(jìn)行的操作; 最終的應(yīng)用程序就是由這些過程或函數(shù)以及數(shù)據(jù)結(jié)構(gòu)所組成。 下面,我們舉一個實例來進(jìn)一步討論面向過程的程序設(shè)計方法。考慮一個銀行系統(tǒng)。該系統(tǒng)允許顧客開設(shè)不同類型的銀行賬戶,其中包括現(xiàn)金賬戶、支票賬戶和貸款賬戶,同時允許顧客存款、取款和轉(zhuǎn)賬。 根據(jù)面向過程的思想,首先將銀行系統(tǒng)進(jìn)行功能分析,然后分解成三個模塊分別負(fù)責(zé)存款、取款和轉(zhuǎn)賬三項工作。假設(shè)這三個過程是 MakeDeposit、WithDraw和Transfer。 第二步就是對客戶建立一個數(shù)據(jù)結(jié)構(gòu): struct account char

3、 name; /*姓名*/ unsigned long accounted; / *賬號* / float balance; / *余額* / float interestYTD; /*年利息* / char accountType; /*賬戶類型(現(xiàn)金、支票和貸款) * /; 第三步就是對所需要的操作進(jìn)行代碼編制。void MakeDeposit( float amount) float WithDraw(float amount) void Transfer(float amount , unsigned long BankAccount) 面向過程程序設(shè)計的特點: 顯著特點是數(shù)據(jù)結(jié)構(gòu)和數(shù)

4、據(jù)處理過程處于分離狀態(tài),這會帶來很多弊?。阂弧⒑同F(xiàn)實需求不吻合: 任何一個現(xiàn)實實體(對象)應(yīng)該都具有自己的職能,比如飛機(jī)可以飛行,銀行可以存款、取款;食堂應(yīng)該可以賣飯等,而這些功能與具體的客觀實體(對象)是密不可分的。 面向過程的程序設(shè)計方法就將對象分成了兩部分:一部分就是“數(shù)據(jù)”,表示了一個對象的屬性;另外一部分就是“過程或函數(shù)”,表示了對象具有的功能。這種分離顯然會帶來許多的弊病。比如:顧客與他們的銀行帳戶沒有一定的聯(lián)系。因為此時顧客對計算機(jī)來說,只不過是一串字符或數(shù)字,它根本不知道那個數(shù)字代表銀行帳戶,更不用說哪個帳戶是誰的,帳戶的內(nèi)容是什么。這顯然和實際的情況不符合的。 這說明面向過程

5、程序設(shè)計中,無論是飛機(jī)或銀行 在計算機(jī)中都是一些類似的數(shù)字,即一個對象進(jìn)入計算機(jī)后全部程序員無條件的分解成一堆數(shù)據(jù),然后通過程序員編制的一個叫“程序”的東西進(jìn)行重建恢復(fù)。另外考慮數(shù)據(jù)結(jié)構(gòu)發(fā)生改變會產(chǎn)生什么樣的結(jié)果: 比如Account_type數(shù)據(jù)項,原來只有現(xiàn)金、支票和貸款三種取值,程序只能識別這三種取值。由于帳戶類型的不同,編寫存款等過程時,將以不同的操作代碼與之對應(yīng),即對于現(xiàn)金、支票和貸款這三種不同類型的帳戶,其取款過程都是不同的。 如果要增加一種帳戶類型“退休帳戶”,原來的程序肯定會出錯。因為原來的程序只考慮了以上三種帳戶的情況,也就是說每增加一種類型的帳戶就必須修改重新修改程序代碼,

6、可見其維護(hù)成本是相當(dāng)大的。 以上簡單地分析了面向過程在程序的直觀性和維護(hù)性方面的缺陷。 面向過程程序設(shè)計方法,把問題被著作一系列將被完成的任務(wù),如讀、計算和打印等,許多函數(shù)用于完成這些任務(wù)。問題的焦點集中于函數(shù)。下圖顯示了一個典型的面向過程的程序結(jié)構(gòu)。下圖顯示了一個典型的面向過程的程序結(jié)構(gòu)面向?qū)ο蟪绦蛟O(shè)計面向?qū)ο蟪绦蛟O(shè)計方法的主要出發(fā)點是把數(shù)據(jù)看作程序開發(fā)中的基本元素,并且不允許它在系統(tǒng)中自由流動,將數(shù)據(jù)和操作這些數(shù)據(jù)的函數(shù)緊緊結(jié)合在 一起。面向?qū)ο蟪绦蛟O(shè)計是將應(yīng)用問題分解為一系列客觀實體(對象),然后圍繞這些對象建立數(shù)據(jù)和函數(shù),如圖所示。一個對象的數(shù)據(jù)不能訪問其他對象的函數(shù),而一個對象的函數(shù)

7、可以訪問其他對象的函數(shù)。面向?qū)ο蟪绦蛟O(shè)計的一些顯著特性包括以下幾個方面: 程序設(shè)許的重點在于數(shù)據(jù)而不是過程;程序被劃分為所謂的對象;數(shù)據(jù)結(jié)構(gòu)為表現(xiàn)對象的特性而設(shè)計; 函數(shù)作為對某個對象數(shù)據(jù)的操作,與數(shù)據(jù)結(jié)構(gòu)緊密地結(jié)合在一起;數(shù)據(jù)被隱藏起來,不能被外部函數(shù)訪問; 對象之間可以通過函數(shù)溝通。 (4)對象的行為會改變對象的狀態(tài)。 例如: 玩耍 疲勞=True 睡覺 疲勞=False 吃食 饑餓=False(5)對象的狀態(tài)會影響對象的行為。例如: if( 饑餓 = False) 吃食 return failure對象(1)對象就是我們周圍的各種各樣的事物。例如: 衣服、盤子、寵物、朋友、電腦等。(2)

8、每個對象都有一些狀態(tài)(屬性)。例如:衣服:顏色,長度,面料。貓: 名字,情緒,饑餓,。(3)有些對象會作出一些行為。例如:貓: 情緒,疲勞,饑餓 發(fā)怒,玩耍,吃食,睡覺。 面向?qū)ο蟮某绦蛟O(shè)計與我們?nèi)祟愑^察客觀事物的模式相同: 用類表示客觀事物, 用類中的變量表示事物的屬性, 用函數(shù)表示事物的行為, 屬性與行為相互作用。1、關(guān)于“大學(xué)生”的有關(guān)說明 (1)描述學(xué)生特征的信息(屬性): 姓名,學(xué)號,專業(yè),年齡,性別 (2)描述行為的信息(函數(shù)): 一個學(xué)生主要是學(xué)習(xí),而學(xué)習(xí)主要的行為就是: 讀;寫 對于讀,要指明讀的什么書,讀書所獲得的內(nèi)容是什么?但這里不能用一具體的書名 對于寫,要指明做的什么作

9、業(yè),所完成的具體內(nèi)容是什么?但不能用具體的課程名稱. 通過以上兩方面,就較準(zhǔn)確的描述大學(xué)生的有關(guān)信息,可以說,這種描述使用于所有的大學(xué)生,實際上就是說明了一類人員大學(xué)生。為此,我們可以給出“大學(xué)生類”的一個“規(guī)范”的描述形式: class students private: string XM; int XH; string ZY; int NL; string XB; public: string read(String SM); string write(String KCMC); students(String x,int y,String z,int a, String b); /用于

10、創(chuàng)建一個學(xué)生(構(gòu)造函數(shù)) (3)對于下面的兩個問題如何來描述呢? 張三正在讀英語; 李四正在做數(shù)學(xué)作業(yè);在這里,張三和李四必須是學(xué)生,我們用A代表張三,B代表李四(張三和李四的具體信息應(yīng)清楚:學(xué)號,專業(yè)、年齡、性別是什么?),english代表英語,maths代表數(shù)學(xué),那么:從邁向struct TComplex double real; double imag;void Init( double r, double i);void Tstorage_Init( TStorage *p );void Tstorage_Clear( Tstorage *p );例2.1 struct TCompl

11、ex double real; /復(fù)數(shù)的實部 double imag; /復(fù)數(shù)的虛部 void Init(double r,double i) /給real和imag賦初值 real=r; imag=i; double RealComplex( ) /求復(fù)數(shù)的實部值 return real; double ImagComplex() /求復(fù)數(shù)的虛部值 return imag; ;為了訪問這些成員函數(shù),必須定義該結(jié)構(gòu)類型的變量,然后像訪問結(jié)構(gòu)中的數(shù)據(jù)成員一樣進(jìn)行訪問。#include #include Using namespace std;void main( ) Tcomplex A; A.

12、init (1.1,2.2); coutreal of complex A=A.realcomplex()endl; coutimag of complex A=A.imagcomplex()endl;“類”是對具有共同的屬性特征和行為特征的對象的概括和抽象因此類和對象的關(guān)系是抽象和具體的關(guān)系,類是由多個對象進(jìn)行綜合抽象的結(jié)果,對象又是類的個體實物。 從面向?qū)ο蟪绦蛟O(shè)計的觀點看,一個對象是由描述其屬性的數(shù)據(jù)和定義在其上面的一組操作組成的實體,是數(shù)據(jù)單元和函數(shù)單元的組合體;類是對一組對象的概括和抽象,這組對象具有相同的屬性結(jié)構(gòu)和操作行為,類的定義中一定要說明這些屬性結(jié)構(gòu)和操作行為。 C+對C的改

13、進(jìn),最重要的就是增加了“類”這樣一種數(shù)據(jù)類型。類(class)不但是C+最重要的特征,也是C+的精華,它可以將一個數(shù)據(jù)結(jié)構(gòu)與一個操作緊密地結(jié)合起來。 C+中聲明一個“類”類型,其方法和聲明一個結(jié)構(gòu)體類型是相似的。2.2.1 結(jié)構(gòu)體與類 結(jié)構(gòu)體是C語言的一種自定義的數(shù)據(jù)類型,在結(jié)構(gòu)體中可以含有各種不同類型的成員。C+語言對結(jié)構(gòu)類型進(jìn)行了擴(kuò)充,它不僅可以含有不同類型的成員,而且還可以含有函數(shù)。例如下面聲明的的結(jié)構(gòu)體:在C+中,一個結(jié)構(gòu)的成員(包括數(shù)據(jù)和函數(shù))通常分為兩類:私有成員(private)和公有成員(public)。私有成員只能被該結(jié)構(gòu)中的其它成員訪問,公有成員既可被結(jié)構(gòu)內(nèi)其它成員訪問,也

14、可被結(jié)構(gòu)外的其它部分訪問。1 類的定義格式:class 類名public : 成員數(shù)據(jù); 成員函數(shù); protected:成員數(shù)據(jù);成員函數(shù);private : 成員數(shù)據(jù); 成員函數(shù);;關(guān)鍵字類名私有公有保護(hù)class Student public : float average; void SetName(char *name); void SetMath(float math); float GetAverage(void); void SetChinese(float ch);private : char Name20; float Math; float Chinese;分號不能少類的

15、成員:成員函數(shù)、成員數(shù)據(jù)class Clock public: void SetTime(int NewH, int NewM, int NewS); void ShowTime(); private: int Hour, Minute, Second;成員數(shù)據(jù)成員函數(shù)成員函數(shù)外部實現(xiàn)void Clock:SetTime(int NewH, int NewM, int NewS) Hour=NewH; Minute=NewM; Second=NewS;void Clock:ShowTime() coutHour:Minute: char szName5 如果szName 不是私有,需要修改全部

16、: strcpy( man1.szName, “Tom123” );如果將szName變?yōu)樗接? 所有對szName的訪問都是通過成員函數(shù)來進(jìn)行, man1.SetName( “Tom123” );類成員訪問控制表訪問控制含義屬 性public公有成員類的外部接口protected保護(hù)成員僅允許本類成員函數(shù)及派生類成員函數(shù)訪問private私有成員僅允許本類成員函數(shù)訪問實際上,在C+中,類class和結(jié)構(gòu)struct是類似的,它們的主要區(qū)別是缺省值不同:在類中,缺省時成員是私有的;而在結(jié)構(gòu)中,缺省時成員是公有的。數(shù)據(jù)成員可以是任何數(shù)據(jù)類型,但是不能用自動(auto)、寄存器(register)

17、或外部(extern)進(jìn)行說明。不能在類的聲明中給數(shù)據(jù)成員賦初值。例如: class abc private: char a=q; int b=33; public: /錯誤/錯誤成員函數(shù)的實現(xiàn)兩種實現(xiàn)方式:成員函數(shù)的類外實現(xiàn)內(nèi)聯(lián)成員函數(shù)在類體外定義成員函數(shù)的格式:void A:Setxy(float a,float b) x=a; y=b; 函數(shù)類型類名函數(shù)名形參列表函數(shù)體返回值類型 類名:成員函數(shù)名(參數(shù)表) 函數(shù)體 class A private: float x, y; public: void Setxy(float a,float b); void Print(void);;/類定

18、義, Point.hclass Point public: void InitPoint(float PointA_x=0, float PointA_y=0); void Move(float New_x, float New_y); float GetPointx(); float GetPointy();private: float P1_x,P1_y;/成員函數(shù)的類外實現(xiàn),point.cpp void Point:InitPoint(float PointA_x, float PointA_y) P1_x=PointA_x; P1_y=PointA_y; void Point:Move

19、(float New_x, float New_y) P1_x+=New_x; P1_y+=New_y; float Point:GetPointx() return P1_x; float Point:GetPointy() return P1_y; 函數(shù)的實現(xiàn)函數(shù)聲明成員函數(shù)的類外實現(xiàn):內(nèi)聯(lián)函數(shù)為什么要內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)的定義形式內(nèi)聯(lián)函數(shù)注意事項內(nèi)聯(lián)函數(shù)-為什么要內(nèi)聯(lián)函數(shù)例:int min( int v1, int v2 ) return ( v1 v2 ? v1:v2 );使用這個函數(shù)有什么好處?使用這個函數(shù)有什么缺點?內(nèi)聯(lián)函數(shù)-為什么要內(nèi)聯(lián)函數(shù)C語言中的宏定義#define MIN(a,

20、 b) (a)=b ? 0 : 1if( FLOOR(a&0 x0f, 0 x07) ) /宏展開:if( a&0 x0f=0 x07?0:1 )宏在類內(nèi)class X int i; public:#define VAL(x:i) /Error內(nèi)聯(lián)函數(shù)的定義形式非類的函數(shù)inline int plusone( int x ) return +x; 類的成員函數(shù)在類體中,直接給出函數(shù)定義在類外時,使用inline關(guān)鍵字內(nèi)聯(lián)函數(shù)舉例(一)class Point public: void Init(int initX,int initY) X=initX; Y=initY; int GetX() r

21、eturn X; int GetY() return Y; private: int X,Y;函數(shù)在聲明的同時,給出實現(xiàn)內(nèi)聯(lián)成員函數(shù)舉例(二)class Point public: void Init(int initX,int initY); int GetX(); int GetY(); private: int X,Y;只聲明函數(shù)inline void Point: Init(int initX,int initY) X=initX; Y=initY;inline int Point:GetX() return X;inline int Point:GetY() return Y;50在

22、類外實現(xiàn),但需要添加關(guān)鍵字“inline”,表示是內(nèi)聯(lián)函數(shù)class Point public: void InitPoint(float PointA_x=0, float PointA_y=0) P1_x=PointA_x; P1_y=PointA_y; void Move(float New_x, float New_y) P1_x+=New_x; P1_y+=New_y; float GetPointx() return P1_x; float GetPointy() return P1_y; private: float P1_x,P1_y;函數(shù)在聲明的同時,給出實現(xiàn)內(nèi)聯(lián)函數(shù)-注意事

23、項沒有在類體中定義的內(nèi)聯(lián)成員函數(shù)必須被定義在類定義出現(xiàn)的頭文件中。對于較簡單的函數(shù)可以聲明為內(nèi)聯(lián)形式。內(nèi)聯(lián)函數(shù)體中不要有復(fù)雜結(jié)構(gòu)(如循環(huán)語句和switch語句)。對象對象的定義聲明類的同時,直接定義對象例如: class CPoint private: int x, y; public: void SetXY( int, int ); int GetX(); int GetY(); op1,op2;CPoint op1,op2; 類中成員的訪問方式類中成員互訪直接使用成員名類外訪問: 訪問 public 屬性的成員,有3種方法通過對象名和成員運算符(“.”)訪問對象中的成員通過指向?qū)ο蟮闹羔樤L

24、問對象中的成員通過對象的引用來訪問對象中的成員 外部訪問 private 屬性的成員,有2種方法 1、通過公有成員函數(shù)為私有成員賦值 2、友元函數(shù)訪問 public 屬性的成員,有3種方法:通過對象名和成員運算符(“.”)訪問對象中的成員:A.x;通過指向?qū)ο蟮闹羔樤L問對象中的成員: p-x;通過對象的引用來訪問對象中的成員 B.x;回憶結(jié)構(gòu)體成員訪問方式(1)通過對象名和成員運算符訪問對象中的成員void main() CPoint p1; p1. Init(8,100); coutp1. GetX()p1.GetY();圓點訪問形式:對象名.公有成員class CPoint public:

25、 void Init(int a,int b) X=a; Y=b; int GetX() return X; int GetY() return Y; private: int X,Y;p1.GetX()實際上是一種縮寫形式,它表達(dá)的意義是p1.Point:GetX(),這兩種表達(dá)式是等價的。用成員選擇運算符“.”只能訪問對象的公有成員,而不能訪問對象的私有成員或保護(hù)成員。 若要訪問對象的私有的數(shù)據(jù)成員,只能通過對象的公有成員函數(shù)來獲取。 class A float x,y;public: float m,n; void Setxy( float a, float b ) x=a; y=b;

26、void Print(void) coutxtyendl; ;void main(void) A a1,a2; a1.m=10; a1.n=20;/為公有成員數(shù)據(jù)賦值 a1.x=2; a1.y=5; a1.Setxy(2.0,5.0); a1.Print();必須通過類內(nèi)公有函數(shù)訪問私有數(shù)據(jù)成員非法,私有成員不能在類外訪問class Timepublic: int hour; int minute;void main() Time t,*p; p=&t; couthour;指針訪問形式: 對象指針變量名-公有成員class A private: float x,y; public:float

27、Sum(void) return x+y; void Set(float a,float b) x=a;y=b; void Print(void) coutx=xty=ySet(2.0, 3.0); /通過指針引用對象的成員函數(shù) p-Print(); coutSum()endl; a2.Set(10.0, 20.0); a2.Print();Setxy()Getxy()Printxy()xy2.03.0pa1定義類的數(shù)組及數(shù)組中元素的引用void main(void)Stu stu3;/定義類的數(shù)組Stu *pstu;/定義類的指針pstu=stu;/為指針賦值int i;stu0.SetSt

28、udent (“A”,90,90); /通過數(shù)組元素的引用賦值stu1.SetStudent (B,80,80);stu2.SetStudent (C,70,70);for(i=0;iShow (); /指針變量指向數(shù)組元素pstu+; /指針變量加一,指向下一元素stupstupstu3 通過對象的引用來訪問對象中的成員class Timepublic: int hour; int minute;void main() Time t1; Time &t2=t1; coutt2.hour;由于t1和t2公用一個空間,因此, t2.hour就是t1.hour引用就是變量的另外一個名字類的對象外部

29、如何引用私有數(shù)據(jù)成員1. 通過公有函數(shù)操作私有成員賦值2. 友元函數(shù)1、通過公有函數(shù)為私有成員賦值class Test int x , y; public: void Setxy(int a, int b)x=a;y=b; void Printxy(void) coutx=xty=yendl;void main(void) Test p1,p2; p1.Setxy(3, 5); p1.Printxy( );調(diào)用公有函數(shù)為私有對象賦值對象的存儲(cont.)對象1對象2對象10. 成員函數(shù)data1data2data10對象的存儲方式:實例化對象:對象的存儲(cont.)C+中怎么查看對象所占內(nèi)

30、存空間大???this指針class CPoint public: void Init(int a,int b) X=a; Y=b; int GetX() return X; int GetY() return Y; private: int X,Y;void main() CPoint p1, p2; p1.Init( 2, 3 ); coutp1.GetX()p1.GetY(); p2.Init( -2, -3); coutp2.GetX()p2.GetY();輸出是什么?這些成員函數(shù)是如何區(qū)分操作對象是p1 和 p2的?對比結(jié)構(gòu)體struct TPoint int X,Y;void Ini

31、t( TPoint &p, int x, int y ) p.X = x; p.Y = y;void main() TPoint p1, p2; Init( P1, 2, 3 ); coutp1.Xp1.Y; Init( p2, -2, -3); coutp2.XX=a; this-Y=b; int GetX() return this-X; int GetY() return this-Y; private: int X,Y;void main() CPoint p1, p2; p1.Init( 2, 3 ); coutp1.GetX()p1.GetY(); p2.Init( -2, -3)

32、; coutp2.GetX() X=a ; this-Y = b; 在main()函數(shù)中,成員函數(shù)Init(int a, int b)調(diào)用形式 p1.Init ( 2, 3 );this指針C+把類對象作為參數(shù)傳遞給函數(shù)(傳地址)。this指針this指針 成員函數(shù)所屬對象的指針。它指向類對象的地址。它隱含于每個類的成員函數(shù)中。也就是每個成員函數(shù)都有一個this指針。成員函數(shù)訪問類中數(shù)據(jù)成員的格式可以寫成: this-成員變量this指針舉例class CAint i;public: void Hello() cout“Hello”endl; void Show() coutiHello();

33、 p-Show();編譯會怎么樣?運行會怎么樣?this 指針何時使用返回類對象本身CPoint & CPoint:Show() coutXY; return *this;在拷貝/賦值函數(shù)中,作為對象判斷void CPoint:copy( const CPoint & obj ) if ( this ! = &obj ) 類的定義應(yīng)用舉例2、面向?qū)ο蟮母拍铑惖亩x應(yīng)用舉例(1)問題:給出一個矩形類的定義。分析:通過抽象分析,找出描述該類的屬性和方法:(1)成員屬性:一提到矩形,首先想到矩形的長和寬,因而其中成員屬性有:邊的長度:(實型數(shù))邊的寬度:(實型數(shù))如果要關(guān)心矩形的位置,則需要抽象出舉

34、行左上角頂點的坐標(biāo)值,則需要增加下列成員屬性:x坐標(biāo)值: (實型數(shù))y坐標(biāo)值: (實型數(shù)) 2、面向?qū)ο蟮母拍铑惖亩x應(yīng)用舉例(2)(2)成員方法: 對于矩形,說道計算問題,我們就會立即想到矩形的周長、面積,因而成員方法有: 計算矩形的周長: (計算的結(jié)果(數(shù)值為實型),作為函數(shù)值返回)計算矩形的面積: (計算的結(jié)果(數(shù)值為實型),作為函數(shù)值返回)另外: 有時需要移動矩形的位置,按水平和垂直方向移到新的位置; 有時需要改變矩形的長度和改變矩形的寬度; 有時需要得到(獲?。┚匦蔚膶嶋H長度值和寬度值; 有時需要,在顯示器上顯示矩形的屬性值; 需要構(gòu)造方法來形成矩形(由頂點、長度、寬度形成矩形)因而

35、需要再有的成員方法:移動矩形的位置:(需要水平和垂直方向的移到量)改變矩形的長度改變矩形的寬度獲取矩形的長度獲取矩形的寬度顯示矩形的屬性值(4項)構(gòu)造方法(需要4個參數(shù))2、面向?qū)ο蟮母拍铑惖亩x應(yīng)用舉例(3)根據(jù)以上的抽象分析,可以給出矩形類定義:class rectangle private: double L; /邊的長度 double W; /邊的寬度 double X; /頂點的坐標(biāo), x坐標(biāo)值, double Y; /頂點的坐標(biāo), y坐標(biāo)值 public: double perimeter() /計算矩形的周長 double area() /計算矩形的面積 void move (d

36、ouble a ,double b) /移動矩形到新位置 double getL() /獲取矩形的長度 double getW() /獲取矩形的寬度 double setL(double a ) /改變矩形的長度為新值 double setW(double a ) /改變矩形的寬度為新值 void show() /顯示矩形的屬性值(4項) rectangle (double a,double b, double c,double d) /構(gòu)造方法(4個參數(shù))每個函數(shù)是如何實現(xiàn)的呢?2、面向?qū)ο蟮母拍铑惖亩x應(yīng)用舉例(4)根據(jù)以上的抽象分析,可以給出矩形的JAVA類定義:class rectan

37、gle private: double L; /邊的長度 double W; /邊的寬度 double X; /頂點的坐標(biāo), x坐標(biāo)值, double Y; /頂點的坐標(biāo), y坐標(biāo)值 public: double perimeter() /計算矩形的周長 double area() /計算矩形的面積 void move (double a ,double b) /移動矩形到新位置 double getL() /獲取矩形的長度 double getW() /獲取矩形的寬度 double setL(double a ) /改變矩形的長度為新值 double setW(double a ) /改變矩

38、形的寬度為新值 void show() /顯示矩形的屬性值(4項) rectangle (double a,double b, double c,double d) /構(gòu)造方法(4個參數(shù) double perimeter() double p; p=(L+W)*2; return p;2、面向?qū)ο蟮母拍铑惖亩x應(yīng)用舉例(5)根據(jù)以上的抽象分析,可以給出矩形的JAVA類定義:class rectangle private: double L; /邊的長度 double W; /邊的寬度 double X; /頂點的坐標(biāo), x坐標(biāo)值, double Y; /頂點的坐標(biāo), y坐標(biāo)值 public:

39、double perimeter() /計算矩形的周長 double area() /計算矩形的面積 void move (double a ,double b) /移動矩形到新位置 double getL() /獲取矩形的長度 double getW() /獲取矩形的寬度 double setL(double a ) /改變矩形的長度為新值 double setW(double a ) /改變矩形的寬度為新值 void show() /顯示矩形的屬性值(4項) rectangle (double a,double b, double c,double d) /構(gòu)造方法(4個參數(shù)double

40、area() double s; s=L*W; return s;2、面向?qū)ο蟮母拍铑惖亩x應(yīng)用舉例(6)根據(jù)以上的抽象分析,可以給出矩形的JAVA類定義:class rectangle private: double L; /邊的長度 double W; /邊的寬度 double X; /頂點的坐標(biāo), x坐標(biāo)值, double Y; /頂點的坐標(biāo), y坐標(biāo)值 public: double perimeter() /計算矩形的周長 double area() /計算矩形的面積 void move (double a ,double b) /移動矩形到新位置 double getL() /獲取矩

41、形的長度 double getW() /獲取矩形的寬度 double setL(double a ) /改變矩形的長度為新值 double setW(double a ) /改變矩形的寬度為新值 void show() /顯示矩形的屬性值(4項) rectangle (double a,double b, double c,double d) /構(gòu)造方法(4個參數(shù) void move (double a,double b) X=X+a; Y=Y+b;2、面向?qū)ο蟮母拍铑惖亩x應(yīng)用舉例(7)根據(jù)以上的抽象分析,可以給出矩形的JAVA類定義:class rectangle class rectan

42、gle private: double L; /邊的長度 double W; /邊的寬度 double X; /頂點的坐標(biāo), x坐標(biāo)值, double Y; /頂點的坐標(biāo), y坐標(biāo)值 public: double perimeter() /計算矩形的周長 double area() /計算矩形的面積 void move (double a ,double b) /移動矩形到新位置 double getL() /獲取矩形的長度 double getW() /獲取矩形的寬度 double setL(double a ) /改變矩形的長度為新值 double setW(double a ) /改變矩

43、形的寬度為新值 void show() /顯示矩形的屬性值(4項) rectangle (double a,double b, double c,double d) /構(gòu)造方法(4個參數(shù) double getL() return L;2、面向?qū)ο蟮母拍铑惖亩x應(yīng)用舉例(8)根據(jù)以上的抽象分析,可以給出矩形的JAVA類定義:class rectangle private: double L; /邊的長度 double W; /邊的寬度 double X; /頂點的坐標(biāo), x坐標(biāo)值, double Y; /頂點的坐標(biāo), y坐標(biāo)值 public: double perimeter() /計算矩形的周

44、長 double area() /計算矩形的面積 void move (double a ,double b) /移動矩形到新位置 double getL() /獲取矩形的長度 double getW() /獲取矩形的寬度 double setL(double a ) /改變矩形的長度為新值 double setW(double a ) /改變矩形的寬度為新值 void show() /顯示矩形的屬性值(4項) rectangle (double a,double b, double c,double d) /構(gòu)造方法(4個參數(shù) double getW() return W;2、面向?qū)ο蟮母拍?/p>

45、類的定義應(yīng)用舉例(9)根據(jù)以上的抽象分析,可以給出矩形的JAVA類定義:class rectangle private: double L; /邊的長度 double W; /邊的寬度 double X; /頂點的坐標(biāo), x坐標(biāo)值, double Y; /頂點的坐標(biāo), y坐標(biāo)值 public: double perimeter() /計算矩形的周長 double area() /計算矩形的面積 void move (double a ,double b) /移動矩形到新位置 double getL() /獲取矩形的長度 double getW() /獲取矩形的寬度 double setL(do

46、uble a ) /改變矩形的長度為新值 double setW(double a ) /改變矩形的寬度為新值 void show() /顯示矩形的屬性值(4項) rectangle (double a,double b, double c,double d) /構(gòu)造方法(4個參數(shù) double setL(double a) L=a;2、面向?qū)ο蟮母拍铑惖亩x應(yīng)用舉例(10)根據(jù)以上的抽象分析,可以給出矩形的JAVA類定義:class rectangle private: double L; /邊的長度 double W; /邊的寬度 double X; /頂點的坐標(biāo), x坐標(biāo)值, doubl

47、e Y; /頂點的坐標(biāo), y坐標(biāo)值 public: double perimeter() /計算矩形的周長 double area() /計算矩形的面積 void move (double a ,double b) /移動矩形到新位置 double getL() /獲取矩形的長度 double getW() /獲取矩形的寬度 double setL(double a ) /改變矩形的長度為新值 double setW(double a ) /改變矩形的寬度為新值 void show() /顯示矩形的屬性值(4項) rectangle (double a,double b, double c,d

48、ouble d) /構(gòu)造方法(4個參數(shù)double setW(double a ) W=a;2、面向?qū)ο蟮母拍铑惖亩x應(yīng)用舉例(11)根據(jù)以上的抽象分析,可以給出矩形的JAVA類定義:class rectangle private: double L; /邊的長度 double W; /邊的寬度 double X; /頂點的坐標(biāo), x坐標(biāo)值, double Y; /頂點的坐標(biāo), y坐標(biāo)值 public: double perimeter() /計算矩形的周長 double area() /計算矩形的面積 void move (double a ,double b) /移動矩形到新位置 doub

49、le getL() /獲取矩形的長度 double getW() /獲取矩形的寬度 double setL(double a ) /改變矩形的長度為新值 double setW(double a ) /改變矩形的寬度為新值 void show() /顯示矩形的屬性值(4項) rectangle (double a,double b, double c,double d) /構(gòu)造方法(4個參數(shù) void show() cout“矩形所在的位置頂點:(“X“,”Y“)”endl; cout“矩形的長度:”Lendl; cout“矩形的寬度:”wendl;2、面向?qū)ο蟮母拍铑惖亩x應(yīng)用舉例(12)根

50、據(jù)以上的抽象分析,可以給出矩形的JAVA類定義:class rectangle private: double L; /邊的長度 double W; /邊的寬度 double X; /頂點的坐標(biāo), x坐標(biāo)值, double Y; /頂點的坐標(biāo), y坐標(biāo)值 public: double perimeter() /計算矩形的周長 double area() /計算矩形的面積 void move (double a ,double b) /移動矩形到新位置 double getL() /獲取矩形的長度 double getW() /獲取矩形的寬度 double setL(double a ) /改變

51、矩形的長度為新值 double setW(double a ) /改變矩形的寬度為新值 void show() /顯示矩形的屬性值(4項) rectangle (double a,double b, double c,double d) /構(gòu)造方法 rectangle (double a,double b, double c,double d) X=a; Y=b; L=c; W=d;給出類定義的演示程序:面向?qū)ο蟮母拍?對象的創(chuàng)建和使用(舉例)例1:類的使用例題(矩形類的應(yīng)用) 利用已定義的”矩形類”,實現(xiàn)有關(guān)矩形的運算求值: (1)定義一個矩形實例a,并計算面積周長; (2)改變該矩形的長度

52、是原來的2倍,再計算面積、周長,并顯示有關(guān)信息(包括矩形的長、寬); (3)移動矩形位置,并顯示新位置的坐標(biāo)。 (給出演示過程)#include” rectangle.h”void main() double A,B; rectangle a(0,0, 10,20); A=a.perimeter(); B=a.area(); cout矩形a的有關(guān)信息如下:“endl; a.show(); cout矩形a的面積:“Bendl; cout矩形a的周長:“Aendl; double C; C=a.getL(); C=2*C; a.setL(C); cout改變后的矩形a的有關(guān)信息如下:“endl;

53、A=a.perimeter(); B=a.area(); cout矩形a的有關(guān)信息如下:“endl; a.show(); cout矩形a的面積:“Bendl; cout矩形a的周長:“Aendl; a.move(20,20); double d,e; d=a.getX(); e=a.getY(); cout矩形a的新坐標(biāo):“endl; cout(“d+,“e)“endl; 類定義練習(xí)題3、面向?qū)ο蟮母拍铑惖亩x應(yīng)用(練習(xí)6-1) 按照上面例題的分析設(shè)計思想,給出下列兩題的類的設(shè)計: 要求: 先給出抽象分析,找出類的屬性和函數(shù),對于函數(shù)要注意返回值,參數(shù)等問題: (1)給出關(guān)于坐標(biāo)系中的“點”的

54、類定義;1 定義一個日期類,其中日期由年月日組成,該類支持以下操作(1)判斷是否是閏年 (年被400整除或者被4整除同時不被100整除)(2)顯示日期 (3 )獲取年月日的值2 定義一個平面上的圓類(圓心和半徑),該類支持以下操作:(1)獲得圓心和半徑(2)分別計算圓的周長、面積(3 )設(shè)置圓心和半徑 (4)輸出圓的有關(guān)信息;再設(shè)計主函數(shù),定義對象,完成有關(guān)的輸入計算輸出3 定義一個平面上矩形類(矩形的兩個頂點),該類支持以下操作(1)計算矩形的周長和面積(2)讀取、設(shè)置矩形的信息4 定義一個學(xué)生類,該類封裝以下信息和操作(1)學(xué)生的姓名、學(xué)號、班級、籍貫(2)顯示學(xué)生的信息(3 )獲取學(xué)生的各項信息5 定義直線類,該類封裝以下操作: 計算直線的斜率3、面向?qū)ο蟮母拍铑惖亩x應(yīng)用(練習(xí)6-2)6 定義課程類,該類封裝以下信息(1)課程號,課程名,課程學(xué)分,開課學(xué)期(2)讀取、設(shè)置各項信息7 定義三角形類,該類支持以下操作(1)讀取、設(shè)置三角形的

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論