1 / 17

Class

Class. 2005/05/25. 類別的所有成員 ( 所有變數跟方法 ) 預設皆為 private 。 私有成員 (private) 只能在該類別的方法內存取 , 公共成員 (public) 則可以被該類別的所有物件存取。. 成員變數. 成員函數. 類別宣告. 宣告一個類別就建立了一個新型態. class Cat { public: int itsAge; int itsWeight; void Meow(); };. 類別名稱. 結束分號. 函數. 函數是一個能處理資料並返回一個值的副程式. 函數宣告 :

Download Presentation

Class

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Class 2005/05/25

  2. 類別的所有成員(所有變數跟方法)預設皆為private。私有成員(private)只能在該類別的方法內存取, 公共成員(public)則可以被該類別的所有物件存取。 成員變數 成員函數 類別宣告 • 宣告一個類別就建立了一個新型態. classCat { public: int itsAge; int itsWeight; void Meow(); }; 類別名稱 結束分號

  3. 函數 • 函數是一個能處理資料並返回一個值的副程式. • 函數宣告: 返回值型態 函數名稱 ( 參數 ) ; 例: int Area(int length, int width); 每個函數都有返回型態,如未明顯指出,返回型態是int. 如果函數沒有返回值,返回型態應設為void. • 定義函數: 返回值型態 函數名稱 ( 參數 ) { } 例: int Area(int length, int width) { //陳述句 return (length * width); }

  4. 類別---定義物件 • 物件是將類別實體化,如此才有配置記憶體空間,程式才能透過物件來存取類別中的成員變數與函數。 Cat Test; /*定義了類別為Cat的物件Test*/ 物件名稱 類別名稱 Memory space int itsAge; int itsWeight; void Meow(); Test

  5. 類別---存取類別成員 • 使用點運算子(.)來存取物件的成員 Test . itsAge = 5; • 呼叫成員函數 Test . Meow ();

  6. 類別中的成員 • 類別的成員變數通常會預設為私有(private) • 必須建立公共(public)的存取方法函數,來存取私有成員變數 class Cat { }; public: int GetAge(); void SetAge(int age); private: int itsAge;

  7. 範例1 getCircumfrence()已經沒有傳入參數,因為它已經是Circle 的一份子,所以可以直接存取radius變數,而不需透過物件成員運算子(ex. c.radius) • class Circle • { • public: • float x0,y0; • float radius; • float getCircumfrence() { return 2.0*3.14159*radius; } • }; getCircumfrence()的宣告和定義都放在類別之內,這種宣告的方式稱為inline 函式宣告,優點是執行效率較高,但是編譯時產生的執行檔較冗長.

  8. 兩個冒號 Cat :: 成員函式放在類別之外 • 也被稱為函數定義。 • 成員函數定義以類別名開始,然後是兩個冒號、函數名以及參數。 前面需加返回值型態 int GetAge() { } return itsAge;

  9. 範例2 • class Circle • { • public: • float x0,y0; • float radius; • float getCircumfrence(); • }; • float Circle::getCircumfrence() • { • return 2.0*3.14159*radius; • } 表示getCircumfrence()屬於Circle 的成員。

  10. #include<iostream.h> #include<string.h> class Reader //宣告類別 { private: char name[10]; public: long index; char *get_name() { return name; } void set_name(char *); }; void Reader::set_name(char *i_name) { //Reader的成員函數,作字串copy strcpy(name,i_name); } int main() { Reader A_Reader; char name[10]; cout<<"Please enter your name:"; cin>>name; A_Reader.index=1; A_Reader.set_name(name); cout<<"Your name is "; cout<<A_Reader.get_name(); cout<<"(index"<<A_Reader.index; cout<<")\n"; return 0; } 範例3

  11. #include<iostream.h> #include<string.h> class String1 //宣告類別 { private: char *str; int len; public: void show_string(); void set_string(char *); }; void String1::show_string() { cout<<"string:"<<str << " \nlength:"<<len<<endl; } void String1::set_string(char *i_string) { len=strlen(i_string); str=new char[len+1]; strcpy(str,i_string); } int main() { String1 A_String; char i_string[12]="Hello Kitty"; A_String.set_string(i_string); A_String.show_string(); return 0; } 範例4

  12. 建構子(建立者constructor) • 類別有一個特別的成員函數,稱為建構子。用來初始化類別中的成員資料。 • 建構子可以接收參數,但不能返回值,即使是void,也不能。 • 建構子是一個與類別同名的類別方法。 • 沒有宣告建構子時,編譯器將自動產生一個預設的建構子。 • 預設的建構子沒有參數,而且什麼也不做。 • 物件作實體化時,會自動啟動建構子。 • 一定要設成public 。

  13. 宣告Cat 類別 類別名稱 傳入的參數 在public中寫一個預設建構子 Cat() 與類別同名的類別方法 注意: 建構子無返回值,連void也不能有。 將 initialAge的值指定給成員變數 itsAge 用建構子初始化 • 我們可以自己寫預設建構子,並且在預設建構子中寫一個用於初始化類別的函數體。 兩個冒號 class Cat (int initialAge) { }; Cat :: Cat pubilc: private: { } Cat(); itsAge = initialAge; int itsAge;

  14. 類別名稱 否定號加類別名 解構子(破壞者destructor) • 每當宣告建構子時,就應同時宣告一個解構子。 • 沒有宣告解構子時,編譯器將自動產生一個。 • 解構子總是帶有類別名,前面是一個否定號(~)。 • 不可作overloading 。 兩個冒號 Cat :: ~Cat() { }

  15. 態 不 同 型態、參數 數目都不同 多載函數 • C++允許建立多個同名函數,這就叫做函數重載 。 • 這些函數的參數必須不相同,或者是參數型態不同,或者是參數數目不同,或者是兩者都不同 。 int myFunction(int , int) int myFunction(long , long) int myFunction(long)

  16. 宣告 Cat類別 預設建構子 接收1整數變數的建構子 多載建構子 • 建構子與類別的成員函數都可以像函數一樣重載。 class Cat { } public: private: Cat( ); Cat(int initialage); int itsAge;

  17. 建立參考(將位址傳入) • 建立參考時,需使用另一個物件名來初始化 。 • 對參考所做的一切會真正地作用到目標之上 。 • 建立參考: 先寫目標物件的型態, 然後是參考運算子(&), 再加上參考名﹝可以是任何合法的變數名﹞ 範例:建立一個對整數變數的參考 int intOne; int & rSomeRef = intOne;

More Related