C++入門 以Dev C++為例.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

大葉大學 指導教授: 黃鈴玲 學生: 林慶南(工業工程與科技管理所)
計算機程式語言實習課.
11 繼承類別 11.4 建立者與破壞者 單一建立者與破壞者 11-20
C/C++基礎程式設計班 C++:物件導向程式設計 類別的使用 (Class)
File Access 井民全製作.
C++程序设计 王希 图书馆三楼办公室.
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
Visual C++ introduction
簡易C++除錯技巧 長庚大學機械系
資料大樓 --談指標與陣列 綠園.
函數(一) 自訂函數、遞迴函數 綠園.
2 C++ 程式概論 2.1 C++ 程式結構 程式註解 // 插入標題檔 #include 2-3
列舉(enum).
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
Java程式概觀.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
C語言簡介 日期 : 2018/12/2.
Object-Oriented Programming in C++ 第一章 C++的初步知识
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
第七章 檔案處理.
Java 程式設計 講師:FrankLin.
Instructor Textbook Requirements TAs C++程式設計風格與藝術 (O’Reilly).
谭浩强 编著 中国高等院校计算机基础教育课程体系规划教材 C++程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
開始使用Visual C++.
第 19 章 XML記憶體執行模式.
|07 函數.
輸入&輸出 函數 P20~P21.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
挑戰C++程式語言 ──第8章 進一步談字元與字串
物件導向程式設計 CH2.
認識常數與變數 學習C++所提供的各種基本資料型態 瞭解溢位的發生 學習認識資料型態之間的轉換
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
Object-Oriented Programming in C++ 第二章 类和对象
C++程式設計入門 變數與運算子 作者:黃建庭.
挑戰C++程式語言 ──第7章 輸入與輸出.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
OOP9 類別Class.
函數應用(二)與自定函數.
陣列與結構.
#include <iostream.h>
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
變數與資料型態  綠園.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
Class 2005/05/25.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
Programming & Language Telling the computer what to do
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
變數與資料型態  綠園.
Array(陣列) Anny
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
13 繼承類別 13.1 繼承概論 基礎類別與衍生類別 繼承型式 13-2
Unix指令4-文字編輯與程式撰寫.
方法(Method) 函數.
InputStreamReader Console Scanner
Presentation transcript:

C++入門 以Dev C++為例

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

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

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

程式範例二 要求使用者輸入兩個整數,並把計算結果輸出 #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; } C++的 cin可以輸入整數、浮點數、字元與字串 不需格式控制碼(%d , %c…等)

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

布林型態 #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; }

變數的位置 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; }

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

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

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

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

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 變數

程式範例三 #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

範例三 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 函式宣告,優點是執行效率較高,但是編譯時產生的執行檔較冗長.

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

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

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

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

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

多載函數 int myFunction(int , int) int myFunction(long , long) 這些函數的參數必須不相同,或者是參數型態不同,或者是參數數目不同,或者是兩者都不同 。 型 態 不 同 int myFunction(int , int) int myFunction(long , long) 型態、參數 數目都不同 int myFunction(long)

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

範例四(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; };

範例四(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; }

範例四的執行結果