Presentation is loading. Please wait.

Presentation is loading. Please wait.

建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。

Similar presentations


Presentation on theme: "建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。"— Presentation transcript:

1 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。

2 宣告靜態資料成員語法 static 資料型別 資料成員名稱 ; 注意:靜態資料不屬於特定物件,所以靜態資 料的初值無法利用建構子來設定  靜態資料成員的初值設定,將在類別的宣告 外,利用 :: 來完成初值設定 資料型別 類別名稱 :: 資料成員名稱 = 初值 ;

3 靜態資料成員的存取 存取靜態資料成員的語法如下: 類別名稱 :: 靜態資料成員名單

4 一個班級裡學生的例子 學生類別的靜態資料: (1) 姓名 (2) 學號 (3) 數學成績 (4) 英文成績 (5) 班級人數

5 靜態資料 相同班級的學生,所擁有的班級人數都是相同 的,所以這類別共同擁有的資料可以設為靜態 資料 所以學生人數可以設為靜態資料

6 靜態成員函數 宣告靜態成員函數,與宣告一般函式相同,只 要在宣告函式前,加上 static 靜態函式的呼叫 類別名稱 :: 靜態成員函數名稱 ( 輸入參數 ) Ps: 靜態函數中只能修改靜態資料,不能修改 一般資料程員

7 繼承

8 基礎類別 (Base class) :哺乳類是貓、狗類別 的基礎類別 衍生類別 (Derived class) :貓、狗類別是繼承 哺乳類的衍生類別 哺乳類 貓狗

9 食肉目 貓科 貓屬 家貓種 豹屬 犬科 靈長目 人科 人屬 人種 一般化 特殊化 抽象化過程抽象化過程

10 便於管理系統中的物件 系統的擴充更加容易 程式碼的再用 基礎類別的特性 增加的特性 修改的特性 繼承

11 衍生類別的非靜態資料成員 基儲類別的 非靜態資料成員

12 人 學生社會人士 姓名 身高 體重 性別 姓名 身高 體重 性別 學號 數學成 績 英文成 績 姓名 身高 體重 性別 職業 薪水 基礎類別 (Base class) :人 衍生類別 (Derived class) :學生、社會人士

13 類別屬性資料的繼承 學號 數學成績 英文成績 姓名身高 體重性別

14 基礎類別 (Base class) :動物 衍生類別 (Derived class) :魚、鳥 動物 魚鳥 呼吸 吃東西 睡覺 呼吸 吃東西 睡覺 游泳 呼吸 吃東西 睡覺 飛

15 類別方法的繼承 游泳 ( 動物 類別 ) 呼吸吃東西 睡覺 魚 的 類別

16 繼承機制 繼承權限的等級: public, protected, private class 衍生類別 : 繼承權限 基礎類別

17 public 繼承 基礎類別中成員的 存取權限等級 public protected private 衍生類別繼承後存取 權限等級 public protected 無法存取 繼承 基儲類別成員為 private ,衍生類別將無法存取 public 和 protected 等級將不會改變

18 class animal { private : void sleep(); protected: void eat(); public: void breathe(); }; void animal::breathe(){cout<<“Breathe…”<<endl;} void animal::eat(){cout<<“Eat…”<<endl;} void animal::sleep(){cout<<“Sleep…”<<endl;}

19 class bird : public animal{ public: void fly(); }; void bird::fly(){cout<<“Fly……”<<endl;} 採取 public 繼承方式 bird 物件不能使用 animal 的 sleep 方法 eat 方法為 protected 等級 breathe 方法為 public 等級

20 Public 繼承後的情形 class bird : public animal{ public: void fly(); }; class bird : public animal{ protected: void eat(); public: void breathe(); void fly(); }; 紅字代表經過繼承 animal 後 增加的方法 實際 bird class 的程式碼

21 int main() { bird Little_bird; Little_bird.fly();  可以執行,因為 fly 為 bird 類別的 public 等級 Little_bird.breathe();  可以執行,因為 bird 是利用 public 方式繼承 animal 而且 breathe 在 animal 中是 public 等級 Little_bird.eat();  不可以執行,因為 bird 利用 public 方式繼承 animal 而 eat 在 animal 中是 protected 等級,所以不行直接執行 ( 要另外用一個 public 等級的方法來使用 eat() 方法。 Little_bird.sleep();  絕對不能執行,因為 sleep 在 animal 中是 private 等級。 }

22 class bird : public animal{ public: void fly(); void eat(); }; void bird::fly(){cout<<“Fly……”<<endl;} void bird::eat(){animal::eat();} 採取 public 繼承方式 bird 類別不能使用 animal 的 sleep 方法 eat 方法為 protected 等級 breathe 方法為 public 等級

23 存取基礎類別的成員 想在衍生類別的成員函數中,存取基礎類別內 同名的成員,可以利用 :: ,語法如下 基礎類別名稱 :: 資料成員 void bird::eat(){animal::eat();}

24 private 繼承 基礎類別中成員的 存取權限等級 public protected private 衍生類別繼承後存取 權限等級 private 無法存取 繼承 基儲類別成員為 private ,衍生類別將無法存取 public 和 protected 等級將變成 private 等級

25 class animal { private : void sleep(); protected: void eat(); public: void breathe(); }; void animal::breathe(){cout<<“Breathe…”<<endl;} void animal::eat(){cout<<“Eat…”<<endl;} void animal::sleep(){cout<<“Sleep…”<<endl;}

26 class bird : private animal{ public: void fly(); }; void bird::fly(){cout<<“Fly……”<<endl;} 採取 public 繼承方式 bird 類別不能使用 animal 的 sleep 方法 eat 方法為 private 等級 breathe 方法為 private 等級

27 Public 繼承後的情形 class bird : public animal{ public: void fly(); }; class bird : public animal{ private: void eat(); void breathe(); public: void fly(); }; 紅字代表經過繼承 animal 後 增加的方法 實際 bird class 的程式碼

28 int main() { bird Little_bird; Little_bird.fly();  可以執行,因為 fly 為 bird 類別的 public 等級 Little_bird.breathe();  不可以執行,因為 bird 利用 private 方式繼 承,所以 bird 中的 breathe() 是 private 等級,故不行直接執行 ( 要另外用一個 public 等級的方法來使用 breathe() 方法。 Little_bird.eat();  不可以執行,因為 bird 利用 private 方式繼承 所以 bird 中的 eat() 是 private 等級,故不行直接執行 ( 要另外用一個 public 等級的方法來使用 eat() 方法。 Little_bird.sleep();  絕對不能執行,因為 sleep 在 animal 中是 private 等級。 }

29 class bird : private animal{ public: void fly(); void eat(); void breathe(); }; void bird::fly(){cout<<“Fly……”<<endl;} void bird::eat(){animal::eat();} void bird::breathe(){animal::breathe();} 採取 public 繼承方式 bird 類別不能使用 animal 的 sleep 方法 eat 方法為 private 等級 breathe 方法為 private 等級

30 protected 繼承 基礎類別中成員的 存取權限等級 public protected private 衍生類別繼承後存取 權限等級 protected 無法存取 繼承 基儲類別成員為 private ,衍生類別將無法存取 public 和 protected 等級將變成 protected 等級

31 下回分解


Download ppt "建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。"

Similar presentations


Ads by Google