自然保育學 Ecosystem Approaches 鄭先祐 (Ayo) 國立 臺南大學 環境與生態學院 生態科學與技術學系 教授 靜宜大學 生態研究所 碩士班
建立靜態資料成員 關鍵字: static...
-
date post
19-Dec-2015 -
Category
Documents
-
view
248 -
download
8
Transcript of 建立靜態資料成員 關鍵字: static...
![Page 1: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/1.jpg)
建立靜態資料成員
關鍵字: static
靜態資料成員不屬於特定物件,而是該類物件所共同擁有的,可做為類別範圍裡的靜態變數。
![Page 2: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/2.jpg)
宣告靜態資料成員語法
static 資料型別 資料成員名稱 ;
注意:靜態資料不屬於特定物件,所以靜態資料的初值無法利用建構子來設定
靜態資料成員的初值設定,將在類別的宣告外,利用 ::來完成初值設定
資料型別 類別名稱 ::資料成員名稱 = 初值 ;
![Page 3: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/3.jpg)
靜態資料成員的存取
存取靜態資料成員的語法如下:
類別名稱 ::靜態資料成員名單
![Page 4: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/4.jpg)
一個班級裡學生的例子
學生類別的靜態資料: (1) 姓名 (2) 學號 (3) 數學成績 (4) 英文成績 (5) 班級人數
![Page 5: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/5.jpg)
靜態資料
相同班級的學生,所擁有的班級人數都是相同的,所以這類別共同擁有的資料可以設為靜態資料
所以學生人數可以設為靜態資料
![Page 6: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/6.jpg)
靜態成員函數 宣告靜態成員函數,與宣告一般函式相同,只要在宣告函式前,加上 static
靜態函式的呼叫 類別名稱 :: 靜態成員函數名稱 ( 輸入參數 )
Ps: 靜態函數中只能修改靜態資料,不能修改一般資料程員
![Page 7: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/7.jpg)
繼承
![Page 8: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/8.jpg)
基礎類別 (Base class) :哺乳類是貓、狗類別的基礎類別
衍生類別 (Derived class) :貓、狗類別是繼承哺乳類的衍生類別
哺乳類
貓 狗
![Page 9: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/9.jpg)
哺乳類
食肉目 靈長目
貓科 犬科 人科
貓屬豹屬
家貓種
人屬
人種
一般化
特殊化
抽象化過程
![Page 10: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/10.jpg)
便於管理系統中的物件 系統的擴充更加容易 程式碼的再用
基礎類別的特性基礎類別的特性增加的特性修改的特性繼承
![Page 11: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/11.jpg)
衍生類別的非靜態資料成員
基儲類別的非靜態資料成員
![Page 12: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/12.jpg)
人
學生 社會人士
姓名身高體重性別
姓名身高體重性別學號
數學成績
英文成績
姓名身高體重性別職業薪水
基礎類別 (Base class) :人 衍生類別 (Derived class) :學生、社會人士
![Page 13: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/13.jpg)
類別屬性資料的繼承
學號 數學成績 英文成績
姓名 身高體重 性別
![Page 14: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/14.jpg)
基礎類別 (Base class) :動物 衍生類別 (Derived class) :魚、鳥
動物
魚 鳥
呼吸吃東西
睡覺
呼吸吃東西
睡覺
游泳
呼吸吃東西
睡覺
飛
![Page 15: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/15.jpg)
類別方法的繼承
游泳
( 動物 類別 )呼吸 吃東西
睡覺
魚 的 類別
![Page 16: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/16.jpg)
繼承機制 繼承權限的等級: public, protected, private
class 衍生類別 : 繼承權限 基礎類別
![Page 17: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/17.jpg)
public 繼承
基礎類別中成員的存取權限等級
public
protected
private
衍生類別繼承後存取權限等級
public
protected
無法存取
繼承
基儲類別成員為 private ,衍生類別將無法存取public 和 protected 等級將不會改變
![Page 18: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/18.jpg)
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;}
![Page 19: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/19.jpg)
class bird : public animal{ public: void fly(); };
void bird::fly(){cout<<“Fly……”<<endl;}
採取 public 繼承方式bird 物件不能使用 animal 的 sleep 方法
eat 方法為 protected 等級breathe 方法為 public 等級
![Page 20: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/20.jpg)
Public 繼承後的情形class bird : public animal{
public:
void fly();
};
class bird : public animal{
protected:
void eat();
public:
void breathe();
void fly();
};
紅字代表經過繼承 animal 後增加的方法實際 bird class 的程式碼
![Page 21: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/21.jpg)
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 等級。
}
![Page 22: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/22.jpg)
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 等級
![Page 23: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/23.jpg)
存取基礎類別的成員
想在衍生類別的成員函數中,存取基礎類別內同名的成員,可以利用 ::,語法如下
基礎類別名稱 ::資料成員
void bird::eat(){animal::eat();}
![Page 24: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/24.jpg)
private 繼承
基礎類別中成員的存取權限等級
public
protected
private
衍生類別繼承後存取權限等級
private
private
無法存取
繼承
基儲類別成員為 private ,衍生類別將無法存取public 和 protected 等級將變成 private 等級
![Page 25: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/25.jpg)
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;}
![Page 26: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/26.jpg)
class bird : private animal{ public: void fly(); };
void bird::fly(){cout<<“Fly……”<<endl;}
採取 public 繼承方式bird 類別不能使用 animal 的 sleep 方法
eat 方法為 private 等級breathe 方法為 private 等級
![Page 27: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/27.jpg)
Public 繼承後的情形class bird : public animal{
public:
void fly();
};
class bird : public animal{
private:
void eat();
void breathe();
public:
void fly();
};
紅字代表經過繼承 animal 後增加的方法實際 bird class 的程式碼
![Page 28: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/28.jpg)
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 等級。
}
![Page 29: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/29.jpg)
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 等級
![Page 30: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/30.jpg)
protected 繼承
基礎類別中成員的存取權限等級
public
protected
private
衍生類別繼承後存取權限等級
protected
protected
無法存取
繼承
基儲類別成員為 private ,衍生類別將無法存取public 和 protected 等級將變成 protected 等級
![Page 31: 建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。](https://reader035.fdocuments.net/reader035/viewer/2022081501/56649d385503460f94a11a0c/html5/thumbnails/31.jpg)
下回分解