Presentation is loading. Please wait.

Presentation is loading. Please wait.

OOP9 類別Class.

Similar presentations


Presentation on theme: "OOP9 類別Class."— Presentation transcript:

1 OOP9 類別Class

2 物件導向式問題分析 傳統的程式設計方式-「程序導向」式的設計方法 物件導向式的設計方法 「功能」為何? 那些「程序」可以完成這些功能?
找出「物件」(Object) 物件就是”東西” 訊息傳遞(Message Passing)

3 物件導向程式語言 物件導向語言(OOP),主要用來描述一個物件(Object)的類別(Class),以及如何達成所謂動態繫結(Dynamic Binding) 、同名異式(Polymorphism)、覆蓋(Override)、覆載(Overload)、類別的繼承(Inheritance)等等機制 常見的物件導向程式語言 C++ Java Smalltalk ObjectPascal

4 Object 類別Class  object’s attribute(物件的屬性)有2個
Data(資料), property (Java中稱為field) 又稱”成員變數”Member variable (或data variable) Method 又稱”成員函數” Member function

5 物件導向程式語言 物件導向程式語言的優點 模組化設計(Module Design) 獨立且合作 容易維護(Easy to maintain)
可重複使用Reuse / Software IC

6 類別Class 本章主題 類別(Class)的宣告
操作成員(Operator Member)的定義與行內函式(Inline function) 建構元(Constructor)與解構元(Destructor) 合成使用類別 靜態的類別成員

7 類別的宣告 回顧結構(struct)定義

8 類別的宣告 class 類別名稱     {     private:         型別  成員資料 ;     public:         傳回值  成員函式1(傳入值……);         傳回值  成員函式2(傳入值……)    //成員函式2 為一連線函式。         {                //程式碼         }     };     傳回值  類別名稱::成員函式1(傳入值……)         {             //程式碼         } 類別名稱 變數名稱1; 類別名稱 變數名稱2; 變數名稱1.成員函式1(傳入值……);

9 類別的宣告

10 類別的使用 類別變數 - 案例/物件 public與private存取等級 不允許直接存取private資料成員

11 操作成員的定義 操作成員的定義: 定義函式的內容

12 行內函式 行內函式: 將操作成員的定義(函式的內容)寫在類別的定義中

13 行內函式 行內函式: 將操作成員的定義(函式的內容)寫在類別的定義之中

14 行內函式 使用inline保留字將操作成員定義成為行內函式

15 建構元(Constructor) 建構元是與類別同名稱的成員函式(member function),主要是用來進行資料成員的初始值設定(Initial value setting) 一個類別可以定義多個建構元,用以提供不同的初始化方式 建構元是不允許指定函式回傳資料型態

16 建構元(Constructor) class 類別名稱     {     private:         型別  成員資料 ;     public:         類別名稱( void );    // 建構子函式1         類別名稱(傳入值……);    // 建構子函式2         傳回值  成員函式1(傳入值……);         傳回值  成員函式2(傳入值……)    //成員函式2 為一連線函式。         {                //程式碼         }         ~類別名稱( );    //解構元函式     }; 類別名稱 變數名稱1;    //會呼叫"建構子函式1" 類別名稱 變數名稱2(傳入值……);    //會呼叫"建構子函式2"

17 預設引數建構元 當呼叫建構元時,若無提供足夠的參數值,建構元會以預設的引數值做為初始值

18 解構元(DeConstructor) 解構元的名稱與建構元相同,但名稱前面須加上 ~ 符號
解構元的作用與建構元剛好相反,它主要用來釋放物件所佔用的記憶體空間 解構元不接受任何參數,也不傳回任何值 一個類別只允許定義一個解構元

19 解構元 – 範例

20 解構元 – 範例

21 合成使用類別 在一個類別中使用其他類別作為其資料成員的一員

22 靜態的類別資料成員 靜態(Static)資料成員: 所有的類別案例共用一個資料

23 靜態的類別資料成員 class 類別名稱     {     private:         型別  成員資料 ;         static 型別  靜態成員資料 ;     //只有宣告而己     public:         傳回值  成員函式1(傳入值……);     }; 型別  類別名稱::靜態成員資料 ;     //定義靜態成員資料

24 靜態資料成員

25 靜態的類別資料 靜態類別資料 當成員資料為定義成靜態時,每一個物件,都只有一個共用的靜態資料項。當同類別的全部物件需要共同的資料訊息時,靜態變數便顯得特別有用。靜態資料成員變數的特性和一般靜態變數一樣,雖然僅可在類別中被參考,但生命週期卻和整個程式相同。

26 CLASS class是一個使用者自訂的型態,正式物件導向程式設計的主要觀念,它們允許你隱藏程式的部分功能,限制部份成員的外部存取,達到封裝的目的 和structure不一樣, 包含資料與函式 class class_name { class_member_declaration_list }; 定義的成員預設為私有的(private)

27 CLASS class class_name { private: class screen declaration_list; {
public: protected: }; class screen { private: int m_nWidth; int m_nHeight; int m_x; int m_y; protected: ~screen(); public: screen(); //可有多個不同的constructor void moveto(int, int) void resize(int, int); };

28 CLASS #include “screen.h” void screen::resize(int w, int h) {
m_nWidth=w; m_nHeight=h; } void screen::move(int x, int y)

29 CLASS screen myScreen; //啟動constructor
screen bufScreen=myScreen; //拷貝所有資料成員 screen* ptr= new screen; myScreen=*ptr; ptr=&bufScreen; screen s(20, 90); screen *ps=new screen(20, 90); myScreen.moveto(10,20) ps->moveto(10,20)

30 this 指標 void screen::resize(int w, int h) { this->m_nWidth=w;
this->m_nHeight=h; } screen& screen::xxx() return *this;

31 static類別成員 有時候同一類別的所有抽象體必須要能存取到同一個共用的變數 class chatroom { private:
static int m_nCount; } Const int m_nT;


Download ppt "OOP9 類別Class."

Similar presentations


Ads by Google