160 likes | 306 Views
類別與物件 Class & Object. 物件導向程式設計 OOP. 物件導向: 封裝 Encapsulation 繼承 Inheritance 多形性 Polymorphism 類別與物件 類別是 抽象 的藍圖 物件事 具體 的東西 物件是 類別變數 物件是 類別的實現 物件是 類別的樣例 …. 類別 Class. 藍圖 抽象的 定義屬性 ( 資料 ) 與行為 ( 函式 ) 告訴程式一個物件到底長成怎樣 語法: c lass 類別名稱 { 範圍 : 資料宣告 ; 範圍 : 函式宣告 ; }; 宣告在表單的標頭. 範圍:
E N D
類別與物件 Class & Object
物件導向程式設計OOP • 物件導向: 封裝Encapsulation 繼承Inheritance 多形性Polymorphism • 類別與物件 類別是抽象的藍圖 物件事具體的東西 物件是類別變數 物件是類別的實現 物件是類別的樣例….
類別 Class • 藍圖 • 抽象的 • 定義屬性(資料)與行為(函式) • 告訴程式一個物件到底長成怎樣 • 語法: class 類別名稱 { 範圍: 資料宣告; 範圍: 函式宣告; }; • 宣告在表單的標頭 範圍: Private 僅在類別內存取 Public 公開 Protected 內部及衍生類別存取
類別 Class class pass { public: //共用 int a; String b; void work() { b=“不及格”; if (a>=60) b=“及格”; } };
類別的實現(樣例化) • 宣告別變數 物件 Pass pa; • 類別資料與函式的存取 物件.變數; pa.a; 物件.函式; pa.work(); 範例9-2a, p.9-8
類別-範疇運算子:: • 將類別內的函式外移時使用 • 原類別內保留函式宣告 • 函式內容外移,並加上範疇運算子:: class pass { public: //共用 int a; String b; void work(); }; void pass::work() { b=“不及格”; if (a>=60) b=“及格”; }
類別-建構子&解構子 • 建構子: • 物件建立時自動執行的函式 • 函式名稱需要與類別相同,不可傳回值 • 建構子多載兩個以上建構子 • 解構子: • 刪除物件所占用的記憶體 • ~ class pass { public: //共用 int a; String b; pass() { a=99; } void work(); };
物件陣列 • 一個類別可以產生多個物件 • 彼此獨立 • 將類別產生的物件採用陣列方式來加以存取 ex 9-2f, p.9-17
類別 Class - 資料封裝 • class pass • { • private: //內部存取 • int a; • String b; • public: • void seta(int value) • { • a=value; • } int geta() { return a; } String getb() { return b; } void work() { b="不及格"; if (a>=60) b="及格"; } };
類別 Class - 資料封裝 • pass pa; • pa.seta(StrToInt(Edit1->Text)); • pa.work(); • Label1->Caption=pa.getb();
靜態資料 • 一個類別產生的物件彼此獨立 • 變數與函式獨立(跟著物件走) • 靜態資料 跟著類別走 物件共用 • 在類別宣告時加上static保留字 • 需要在類別外再宣告 型態 類別名稱:: 變數名稱; ex 9-2gh, p.9-20
繼承 Inheritance • 在舊有的類別上新增類別 • 舊有類別的資料與函式可被繼承(private類除外) class 類別名稱 : 繼承方式 舊類別名稱 { }; 繼承方式: • Public:舊類別維持原狀 • Private :舊類別public與protected轉為private • Protected:舊類別public與protected轉為protected
繼承 Inheritance • 函式改寫(Override):名稱與舊類別相同,但功能有修改 • 舊類別的函式仍可以被存取 物件.舊類別名稱::函式名稱 Ex 9-3abc, p.9-26
繼承-抽象類別 • 將類別中的函式以virtual方式宣告類別自動變成抽象類別 virtual void work()=0; • 無法實作物件 • 需要到繼承類別才可以實作物件 Ex 9-3e, p.9-36
繼承-多重繼承 • 一次繼承多個來源類別 • 與單一繼承相同,繼承原類別所有非private的資料與函式 Class 類別名稱:繼承方式 舊類別1, 繼承方式 舊類別2, … { }; Ex 9-4a, p.9-40