1 / 25

C++ 入門

C++ 入門. 以 Dev C++ 為例. C++ 入門. 將物件導向的概念加入 C 語言,之後又加入了封裝( encapsulation )、繼承( inheritance )與多型( polymorphism )等功能。. C++ 語言. 物件導向 , 如封裝 , 繼承與多型. 布林邏輯型態. C語言. C與 C++ 共有的功能 , 如迴圈與選擇性敘述. C++不常用的 功能 , 如結構. C++ 裡多使用類別來取代結構. 物件導向語言. 封裝: 繼承: 多型. 是指將資料和函數都包裝在類別 (class) 的內部,

zoey
Download Presentation

C++ 入門

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. C++入門 以Dev C++為例

  2. C++入門 • 將物件導向的概念加入C語言,之後又加入了封裝(encapsulation)、繼承(inheritance)與多型(polymorphism)等功能。 C++語言 物件導向,如封裝,繼承與多型 布林邏輯型態 C語言 C與C++共有的功能,如迴圈與選擇性敘述 C++不常用的 功能,如結構 C++裡多使用類別來取代結構

  3. 物件導向語言 • 封裝: • 繼承: • 多型 是指將資料和函數都包裝在類別(class)的內部, 限定只有特定的函數才能存取到它,保護資料的安全。 將已有的類別功能,透過繼承的方式給新的類別使用, 因此新的類別不需再撰寫相同的程式碼。 允許相同名稱的函數針對參數的不同而進行不同的處理動作。

  4. 在C++的最新規範中,C++標準函式庫裡所包含 的函數,類別與物件都是定義std名稱空間內 endl為換行符號 程式範例一 • 在螢幕上顯示一行文字 • #include<iostream> //為input/output的縮寫 • #include<cstdlib> //相當於C語言裡stdlib.h • using namespace std; //設定名稱空間,std為standard的縮寫 • int main() • { • cout << “Hello, 您好!” • << endl; • system("pause"); • return 0; • }

  5. C++的 cin可以輸入整數、浮點數、字元與字串 不需格式控制碼(%d , %c…等) 程式範例二 • 要求使用者輸入兩個整數,並把計算結果輸出 • #include <iostream.h>//副檔名.h為舊版本的寫法 • int main() • { • int x; // 第一個輸入整數 • int y; // 第二個輸入整數 • int Sum; // 兩個整數的和 • cout << "請輸入第一個整數\n"; • cin >> x; //由鍵盤讀取一個整數並存入變數x • cout << "請輸入第二個整數\n"; • cin >> y; • cout << "這兩個整數的和是: " << Sum << endl; • return 0; • }

  6. 實習練習一 • 請寫一程式,輸出下列資訊,並可讓使用者輸入自己的四種資訊. 1.班級 2.學號 3.姓名 4.生日

  7. 布林型態 • #include<iostream> • #include<cstdlib> • using namespace std; • int main(void) • { //C++提供了布林型態,它的值只有true和false兩種. • bool is_odd; //宣告布林型態的變數is_odd. • int num; • cout <<"請輸入一個正整數: "; • cin>>num; • if(num%2!=0) /*如果num是奇數,設定is_odd為true*/ • is_odd=true; • else /*如果num是偶數,設定is_odd為false*/ • is_odd=false; • if(is_odd) • cout<< num << "是奇數" <<endl; • else • cout<< num << "是偶數" <<endl; • system("pause"); • return 0; • }

  8. 變數的位置 • C語言只能將變數宣告於函數最開始的地方,C++可在程式的任何地方宣告變數. • 若在迴圈內宣告的區域變數只能在迴圈內使用. • 以下的例子中的變數i在離開for迴圈之後就不能再使用了! • #include<iostream> • #include<cstdlib> • using namespace std; • int main(void) • { • for(int i=0;i<3;i++) • cout<<"在for迴圈裡,i="<< i <<endl; • cout<< "for迴圈執行完後,i=" << i <<endl; • system("pause"); • return 0; • }

  9. 類別介紹 class Cat { int itsAge; int itsWeight; void Meow(); }; • 宣告一個類別就等於建立一個新型態,類別是一組不同型態 的變數及一組相關函數的結合。 • 類別可以由任何型態的變數或其他類別組合而成。 • 類別中的變數被稱為 成員變數 • 類別中的函數被稱為 成員函數 或 方法 類別的宣告方式: 是關鍵字

  10. 成員變數 成員函數 類別介紹 classCat { //宣告類別的屬性與方法 public: int itsAge; int itsWeight; void Meow(); }; • 宣告一個類別就等於建立一個新型態,類別是一組不同型態 的變數及一組相關函數的結合。 • 類別可以由任何型態的變數或其他類別組合而成。 • 類別中的變數被稱為 成員變數 • 類別中的函數被稱為 成員函數 或 方法 類別名稱 類別的所有成員(所有變數跟方法)預設皆為private。私有成員(private)只能在該類別的方法內存取, 公共成員(public)則可以被其他類別的所有物件存取。 結束分號

  11. Memory space int itsAge; int itsWeight; void Meow(); Test 類別---定義物件 • 接著我們就可以使用這個新的資料型別(類別)來宣告變數---類別的實體化。 • 物件是將類別實體化,如此才有配置記憶體空間,程式才能透過物件來存取類別中的成員變數與函數。 Cat Test; /*定義了類別為Cat的物件Test*/ 類別名稱 物件名稱

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

  13. Private(私有) 與 Public(公有) • 類別中最常用的兩個關鍵字是 public 與 private。 • 類別的所有成員(變數或方法)預設皆為 private。 • private(私有) 成員只能在該類別的方法內存取。 • Public(公有) 成員可以被該類別的所有物件存取。 • 範例: class Cat { public: int itsAge; int itsWeight; void Meow(); }; class Cat { int itsAge; int itsWeight; void Meow(); }; Cat Boots; Boots.itsAge=5; 錯誤寫法,因為成員預設為private 因此只能從Cat 類別的成員函數中 去存取 itsAge 變數

  14. 程式範例三 • #include<iostream> • #include<cstdlib> • using namespace std; • class Cat • { • public: • int itsAge; • int itsWeight; • }; • int main() • { • Cat Frisky; • cout << “請輸入貓咪的年齡: ”; • cin >> Frisky.itsAge ; • cout << “Frisky 貓咪的年齡是 ” << Frisky.itsAge

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

  16. 範例三 • 也被稱為函數定義。 • 成員函數定義以類別名開始,然後是兩個冒號、函數名以及參數。 • 成員函式放在類別之外 兩個冒號 前面需加返回值型態 float Circle::getCircumfrence() { return 2.0*3.14159*radius; }

  17. 建構者函數 • 對於一般變數,我們可以在宣告的同時指定其初值,如 int x = 0;這種變數初值化的方式對於類別中的成員變數宣告是不允許的,例如下列宣告將發生編譯錯誤: • class err • { • public: • int x = 0; //錯誤 • …… • } • 解決之道:使用建構者函數

  18. 建構者函數 • 若在產生一個新物件時,立即執行建構者函式,就能將所需的成員變數初值化,一旦物件產生,則所有變數初值也被設定了。 • 特性: • 建構者函式名稱與類別名稱一樣。 • 建構者函式的最重要目的是對物件的屬性進行初值化的工作。 • 建構者函式不能傳回值,但可以傳入參數值。 • 一個類別可以擁有多個建構者函式,但每個建構者函式傳入的參數必須不同。

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

  20. 類別名稱 否定號加類別名 解構者函數 • 每當宣告建構者函數時,就應同時宣告一個解構者函數。 • 沒有宣告解構者函數時,編譯器將自動產生一個 • 在函數執行完畢時,可以釋放資源。 • 解構者函數總是帶有類別名,前面是一個否定號(~)。 兩個冒號 Cat :: ~Cat() { }

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

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

  23. 範例四(1) • #include<iostream> • #include<cstdlib> • using namespace std; • class CWin • { public: • char id; • int width; • int height; • int area(void) //用來計算面績 • { return width*height; } • void show_area(void) //顯示計算的結果 • { cout<<"Window "<< id <<", area=" <<area() <<endl; } • void set_data(char i,int w,int h) //第一個set_data()函數 • { id=i; • width=w; • height=h; } • void set_data(char i) //第二個set_data()函數 • { id=i; } • void set_data(int w,int h) //第三個set_data()函數 • { width=w; • height=h; } • };

  24. 範例四(2) • int main(void) • { • CWin win1,win2; • win1.set_data('A',50,40); //呼叫第一個set_data() • win2.set_data('B'); //呼叫第二個set_data() • win2.set_data(80,120); //呼叫第三個set_data() • win1.show_area(); //利用win1物件來呼叫show_area() • win2.show_area(); //利用win2物件來呼叫show_area() • system("pause"); • return 0; • }

  25. 範例四的執行結果

More Related