面向對象程序設計-3_第1頁
面向對象程序設計-3_第2頁
面向對象程序設計-3_第3頁
面向對象程序設計-3_第4頁
面向對象程序設計-3_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、3.2 內(nèi)聯(lián)函數(shù)1、內(nèi)聯(lián)函數(shù)定義、內(nèi)聯(lián)函數(shù)定義 在一般函數(shù)定義前面加上保留關鍵字inline,該函數(shù)即被說明為內(nèi)聯(lián)函數(shù)。例如:例如:inline int add2(int n)return n+2; 對于內(nèi)聯(lián)函數(shù),C+有可能有可能直接用函數(shù)體代碼來替代對函數(shù)的調(diào)用,這一過程稱為函數(shù)體的內(nèi)聯(lián)展開。(p82)1不能有循環(huán)、switch、遞歸等例:#includeinline float max(float a, float b) /內(nèi)聯(lián)函數(shù),計算最大值 void main()float score2; /存放2個學生的分數(shù)float max_score;max_score =max(score0,

2、score1); /調(diào)用內(nèi)聯(lián)函數(shù)求最大值,在編譯時就已經(jīng)被替換為了max的函數(shù)體,而不是本語句cout“max score =” max_score class 2. 成員函數(shù)成員函數(shù)3. 訪問控制訪問控制4. 構造函數(shù)構造函數(shù)5. 拷貝構造函數(shù)拷貝構造函數(shù)6. 析構函數(shù)析構函數(shù)struct STD char name12; char gender; float *score;13抽象抽象是對具體對象(問題)進行概括,抽出這一類對象的公共性質(zhì)并加以描述的過程。先注意問題的本質(zhì)及描述,其次是實現(xiàn)過程或細節(jié)。數(shù)據(jù)抽象:描述某類對象的屬性或狀態(tài)(對象相互區(qū)別的物理量)。代碼抽象:描述某類對象的共有的

3、行為特征或具有的功能。抽象的實現(xiàn):通過類的聲明。OOP的基本特點14抽象實例鐘表數(shù)據(jù)抽象:int hour,int minute,int second代碼抽象:setTime(),showTime()OOP的基本特點15抽象實例鐘表類class Clock public: void setTime(int newH, int newM, int newS); void showTime(); private: int hour, minute, second;OOP的基本特點16抽象實例人數(shù)據(jù)抽象:string name,string gender,int age,int id代碼抽象:生物屬

4、性角度:getCloth(), eat(), step(),社會屬性角度:work(), promote() ,OOP的基本特點17c+中的類類是具有相同屬性和行為的一組對象的集合,它為屬于該類的全部對象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和行為兩個主要部分。利用類可以實現(xiàn)數(shù)據(jù)的封裝、隱藏、繼承與派生。利用類易于編寫大型復雜程序,其模塊化程度比C中采用函數(shù)更高。類 和 對 象18類的聲明形式 類是一種用戶自定義類型,聲明形式:class 類名稱 public: 公有成員(外部接口) private: 私有成員 protected: 保護型成員類 和 對 象19公有類型成員在關鍵字public后

5、面聲明,它們是類與外部的接口,任何外部函數(shù)都可以訪問公有類型數(shù)據(jù)和函數(shù)。類 和 對 象20私有類型成員在關鍵字private后面聲明,只允許本類中的函數(shù)訪問,而類外部的任何函數(shù)都不能訪問。如果緊跟在類名稱的后面聲明私有成員,則關鍵字private可以省略。類 和 對 象21保護類型與private類似,其差別表現(xiàn)在繼承與派生時對派生類的影響不同,第七章講。類 和 對 象22類的成員class clock public: void setTime(int newH, int newM, int newS); void showTime(); private: int hour, hinute,

6、second;類 和 對 象成員數(shù)據(jù)成員函數(shù)void Clock:setTime(int newH, int newM,int newS) hour = newH; minute = newM; second = newS;void Clock:showTime() cout hour : minute : second;2324成員數(shù)據(jù)與一般的變量聲明相同,但需要將它放在類的聲明體中。類 和 對 象25成員函數(shù)在類中說明原型,可以在類外給出函數(shù)體實現(xiàn),并在函數(shù)名前使用類名加以限定。也可以直接在類中給出函數(shù)體,形成內(nèi)聯(lián)成員函數(shù)。允許聲明重載函數(shù)和帶默認形參值的函數(shù)類 和 對 象26內(nèi)聯(lián)成員函數(shù)

7、為了提高運行時的效率,對于較簡單的函數(shù)可以聲明為內(nèi)聯(lián)形式。內(nèi)聯(lián)函數(shù)體中不要有復雜結構(如循環(huán)語句和switch語句)。在類中聲明內(nèi)聯(lián)成員函數(shù)的方式:將函數(shù)體放在類的聲明中。使用inline關鍵字。類 和 對 象27內(nèi)聯(lián)成員函數(shù)舉例(一)class Point public: void init(int initX, int initY) x = initX; y = initY; int getX() return x; int getY() return y; private: int x, y;類 和 對 象28內(nèi)聯(lián)成員函數(shù)舉例(二)class Point public: void ini

8、t(int initX, int initY); int getX(); int getY(); private: int x, y;類 和 對 象inline void Point: init(int initX,int initY) x = initX; y = initY;inline int Point:getX() return x;inline int Point:GetY() return y;2930對象類的對象是該類的某一特定實體,即類類型的變量。聲明形式: 類名 對象名;例: Clock myClock;類 和 對 象31類中成員的訪問方式類中成員互訪直接使用成員名類外訪問

9、使用“對象名.成員名”方式訪問 public 屬性的成員類 和 對 象32例4-1類的應用舉例#includeusing namespace std;class Clock ./類的聲明略/.類的實現(xiàn)略int main() Clock myClock;myClock.setTime(8, 30, 30);myClock.showTime();return 0;類 和 對 象33構造函數(shù)構造函數(shù)的作用是在對象被創(chuàng)建時使用特定的值構造對象,或者說將對象初始化為一個特定的狀態(tài)。在對象創(chuàng)建時由系統(tǒng)自動調(diào)用。如果程序中未聲明,則系統(tǒng)自動產(chǎn)生出一個隱含的參數(shù)列表為空的構造函數(shù)允許為內(nèi)聯(lián)函數(shù)、重載函數(shù)、帶默

10、認形參值的函數(shù)構造函數(shù)和析構函數(shù)34構造函數(shù)舉例class Clock public:Clock(int newH,int newM,int newS);/構造函數(shù)void setTime(int newH, int newM, int newS);void showTime();private:int hour, minute, second;構造函數(shù)和析構函數(shù)構造函數(shù)的實現(xiàn):Clock:Clock(int newH, int newM, int newS) hour = newH;minute = newM;second = newS;建立對象時構造函數(shù)的作用:int main() Clo

11、ck c(0,0,0); /隱含調(diào)用構造函數(shù),將初始值作為實參。 c.showTime();return 0;3536拷貝構造函數(shù)拷貝構造函數(shù)是一種特殊的構造函數(shù),其形參為本類的對象引用。class 類名 public : 類名(形參);/構造函數(shù) 類名(類名 &對象名);/拷貝構造函數(shù) .;類名:類(類名 &對象名)/拷貝構造函數(shù)的實現(xiàn) 函數(shù)體 構造函數(shù)和析構函數(shù)37拷貝構造函數(shù)(例4-2)class Point public:Point(int xx=0, int yy=0) x = xx; y = yy; Point(Point& p);int getX() re

12、turn x; int getY() return y; private:int x, y;構造函數(shù)和析構函數(shù)Point:Point (Point& p) x = p.x; y = p.y; cout Calling the copy constructor endl;3839拷貝構造函數(shù)(例4-2)當用類的一個對象去初始化該類的另一個對象時系統(tǒng)自動調(diào)用拷貝構造函數(shù)實現(xiàn)拷貝賦值。int main() int main() Point a(1,2); Point a(1,2); Point b = a; / Point b = a; /拷貝構造函數(shù)被調(diào)用拷貝構造函數(shù)被調(diào)用 cout b.

13、getX() endl; cout b.getX() endl; 構造函數(shù)和析構函數(shù)40拷貝構造函數(shù)(例4-2)若函數(shù)的形參為類對象,調(diào)用函數(shù)時,實參賦值給形參,系統(tǒng)自動調(diào)用拷貝構造函數(shù)。例如:void fun1(Point p) void fun1(Point p) cout p.getX() endl; cout p.getX() endl; int main() int main() Point a(1, 2); Point a(1, 2); fun1(a); / fun1(a); /調(diào)用拷貝構造函數(shù)調(diào)用拷貝構造函數(shù) return 0; return 0; 構造函數(shù)和析構函數(shù)41拷貝構造

14、函數(shù)(例4-2)當函數(shù)的返回值是類對象時,系統(tǒng)自動調(diào)用拷貝構造函數(shù)。例如:Point fun2() Point fun2() Point a(1, 2); Point a(1, 2); return a; / return a; /調(diào)用拷貝構造函數(shù)調(diào)用拷貝構造函數(shù) int main() int main() Point b; Point b; b = fun2(); b = fun2(); return 0; return 0; 構造函數(shù)和析構函數(shù)42隱含的拷貝構造函數(shù)如果程序員沒有為類聲明拷貝初始化構造函數(shù),則編譯器自己生成一個隱含的拷貝構造函數(shù)。這個構造函數(shù)執(zhí)行的功能是:用作為初始值的對象

15、的每個數(shù)據(jù)成員的值,初始化將要建立的對象的對應數(shù)據(jù)成員。構造函數(shù)和析構函數(shù)43析構函數(shù)完成對象被刪除前的一些清理工作。在對象的生存期結束的時刻系統(tǒng)自動調(diào)用它,然后再釋放此對象所屬的空間。如果程序中未聲明析構函數(shù),編譯器將自動產(chǎn)生一個隱含的析構函數(shù)。構造函數(shù)和析構函數(shù)44構造函數(shù)和析構函數(shù)舉例#include using namespace std;class Point public: Point(int xx,int yy); Point(); /.其他函數(shù)原型private: int x, y;構造函數(shù)和析構函數(shù)Point:Point(int xx,int yy) x = xx; y =

16、yy;Point:Point() /.其他函數(shù)的實現(xiàn)略4546類的應用舉例(例4-3)一圓形游泳池如圖所示,現(xiàn)在需在其周圍建一圓形過道,并在其四周圍上柵欄。柵欄價格為35元/米,過道造價為20元/平方米。過道寬度為3米,游泳池半徑由鍵盤輸入。要求編程計算并輸出過道和柵欄的造價。游泳池過道#include using namespace std;const float PI = 3.141593;/給出p的值const float FENCE_PRICE = 35; /柵欄的單價const float CONCRETE_PRICE = 20;/過道水泥單價class Circle /聲明定義類C

17、ircle 及其數(shù)據(jù)和方法public:/外部接口Circle(float r);/構造函數(shù)float circumference(); /計算圓的周長float area();/計算圓的面積private:/私有數(shù)據(jù)成員float radius;/圓半徑;47/類的實現(xiàn)/構造函數(shù)初始化數(shù)據(jù)成員radiusCircle:Circle(float r) radius = r;/計算圓的周長float Circle:circumference() return 2 * PI * radius;/計算圓的面積float Circle:area() return PI * radius * radiu

18、s;48int main () float radius;cout radius;Circle pool(radius);/游泳池邊界Circle poolRim(radius + 3); /柵欄 /計算柵欄造價并輸出 float fenceCost = poolRim.circumference() * FENCE_PRICE; cout Fencing Cost is $ fenceCost endl;49/計算過道造價并輸出float concreteCost = (poolRim.area() - pool.area() * CONCRETE_PRICE;cout Concrete Cost is $ concreteCost endl;return 0;運行結果Enter the radiu

溫馨提示

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

評論

0/150

提交評論