C++: 物件導向程式設計-使用類別(Class)

Slides:



Advertisements
Similar presentations
計算機程式語言實習課.
Advertisements

第 2 章 初探 C++.
第九讲 类与对象 (I)面向对象基础.
11 繼承類別 11.4 建立者與破壞者 單一建立者與破壞者 11-20
C++入門 以Dev C++為例.
C/C++基礎程式設計班 C++:物件導向程式設計 類別的使用 (Class)
File Access 井民全製作.
第八章 类和对象.
Project 2 JMVC code tracing
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
走向C++之路 WindyWinter WindyWinter感谢诸位前来捧场。
簡易C++除錯技巧 長庚大學機械系
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第一章 程序的基本结构. 第一章 程序的基本结构 教材及授课结构 本章目标 基本内容 扩展阅读 上机指导 应用举例 习题.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
Object-Oriented Programming in C++ 第一章 C++的初步知识
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
Quiz6 繳交期限: 12/14(四) 23:59前.
Visual Basic 物件導向程式設計簡介.
第七章 檔案處理.
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Instructor Textbook Requirements TAs C++程式設計風格與藝術 (O’Reilly).
谭浩强 编著 中国高等院校计算机基础教育课程体系规划教材 C++程序设计.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
建立一 function s (type) 可以用來繪製cyclic-harmonic curves
第十三讲 文件流与 输出输入重载.
第 19 章 XML記憶體執行模式.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
挑戰C++程式語言 ──第8章 進一步談字元與字串
物件導向程式設計 CH2.
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
Object-Oriented Programming in C++ 第二章 类和对象
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++程式設計入門 變數與運算子 作者:黃建庭.
OOP9 類別Class.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
函數應用(二)與自定函數.
陣列與結構.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
C++语言程序设计 第十章 C++标准模板库 成都信息工程学院计算机系.
PHP+MySQL互動式網頁程式設計班 範例實作-簡易線上購物車 講師:林業峻 CSIE, NTU 6 / 20, 2010.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
Quiz1 繳交期限: 9/28(四).
《数据结构与算法设计》第一部分 面向对象的C++程序设计基础.
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
What is “this”? 在物件導向程式設計中,類別的定義就是在說明如果創建了“這個物件”的話,它會具有那些屬性與功能,以及這些功能是如何實現的。 而所謂的“這個物件”就以 this 來表示。 當我們在JavaScript與jQuery中寫 script 程式(函式)時,“誰”呼叫這個函式,這個“誰”就是該函式中所謂的.
Programming & Language Telling the computer what to do
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
變數與資料型態  綠園.
SQLite資料庫 靜宜大學資管系 楊子青.
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
13 繼承類別 13.1 繼承概論 基礎類別與衍生類別 繼承型式 13-2
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
方法(Method) 函數.
InputStreamReader Console Scanner
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

C++: 物件導向程式設計-使用類別(Class) 講師:林業峻 CSIE, NTU 3/28, 2015

課程大綱 類別 (Class) 物件導向 類別, 物件, 成員 權限 建構式與解構式 作業

C++物件導向 以物件為基礎的程式設計,將程式中互動的單元 視為一個個的物件。 封裝(Encapsulation) 封裝物件資訊是第一步,您要瞭解如何使用類別定義物件的 屬性、方法(行為) 類別是建構物件時所依賴的規格書。 例如設計一個物件: 人 屬性:姓名, 身高, 體重 行為:輸入資料, 輸出資料

類別(Class) 要訣: 類別class是C++中用來封裝資料的關鍵字 當使用類別來定義一個物件時,考慮這個物件可 能擁有的「屬性」與「方法」成員 屬性是物件的靜態描述 方法是可施加於物件上的動態操作 使用類別定義出這個物件的規格書,之後就可依 這個規格書製作出一個個的物件實例,並在製作 過程中設定個別物件的專屬特性資料。 要訣: 屬性宣告要存放的資料 (每個物件有自己的屬性) 方法寫要執行的函式 (通常用來操作物件的屬性)

類別(Class) 宣告一個類別 (類似定義一個結構struct) 語法: class 類別名稱 {   public:    類別名稱(); //建構式, 用來做物件的初始化    ~類別名稱(); //解構式, 用來做物件的善後工作    公開的方法或屬性;   protected: // 只有在同一繼承架構中可以使用的資料    受保護的方法或屬性;   private: // 只有在此類別中可以使用的資料    私有的方法或屬性; };

物件的產生與使用 使用類別宣告物件 (類似宣告一個變數) 語法: 物件可透過 . 來使用或存取該方法或屬性(類似C語 言的結構struct) 類別名稱 物件名稱; 類別名稱 物件名稱( 參數1, 參數2, … , 參數n ); 物件可透過 . 來使用或存取該方法或屬性(類似C語 言的結構struct) 若為物件指標,可透過 ->來使用或存取該方法或 屬性

從一個簡單的例子開始 範例: 輸入兩個人資料(姓名, 身高, 體重)並印出 #include <iostream> #include <string> using namespace std; class Person { public: void input() cin >> name; cin >> height; cin >> weight; } void output() cout << "Name:" << name << endl; cout << "Height:" << height << " cm" << endl; cout << "Weight:" << weight << " kg" << endl; string name; int height; int weight; }; int main() Person p1; Person p2; p1. input(); p1. output(); p2. input(); p2. output(); return 0;

類別的方法之描述 實作一個類別方法的內容(類似寫一個函式) 除了寫在類別定義中, 也可拿到類別定義以外的地 方描述 語法: 資料型態 類別名稱::方法名稱( 引數1,引數2, … ,引數n ) {   程式碼; }

如何設計類別? 思考 (以功能角度) 進階思考 (以使用者角度) 每個物件需要什麼資料? 每個物件需要什麼方法來操作資料? 如何讓使用類別的人方便簡單使用 如何避免使用類別的人因資料操作不當而產生錯誤

練習 設計一個Square(正方型)類別包含下列成員: 使用Square類別宣告兩個邊長為10與20的物件,並 印出它們的面績 屬性: int len: 邊長 方法: int area(): 計算面績 使用Square類別宣告兩個邊長為10與20的物件,並 印出它們的面績

資料的權限 最重要的是別忘了在最後加上分號,初學C++的 新手很常犯這個錯誤 public這個關鍵字,它表示以下所定義的成員可 以使用物件名稱直接被呼叫,稱之為「公開成員 」 private關鍵字下的則是「私有成員」,不可以透 過物件名稱直接呼叫。 在類別封裝時,有一個基本原則是:資訊的最小 化公開。如果屬性可以不公開就不公開,如果要 取得或設定物件的某些屬性,也是儘量透過方法 成員來進行。

資料的權限 思考: 由上一個輸入兩個人資料(姓名, 身高, 體重) 並印出的範例, 你希望Person產生的物件只能用 input與output函式來輸入輸出資料, 該如何達到 此功能? 使用private成員!

資料的權限 範例: #include <iostream> #include <string> using namespace std; class Person { public: void input() cin >> name; cin >> height; cin >> weight; } void output() cout << "Name:" << name << endl; cout << "Height:" << height << " cm" << endl; cout << "Weight:" << weight << " kg" << endl; private: string name; int height; int weight; }; int main() Person p1; Person p2; p1. input(); //p1. height = 0; //這行不能執行! p1. output(); p2. input(); p2. output(); return 0;

練習 設計一個Square(正方型)類別包含下列成員: 使用Square類別宣告兩個邊長為10與20的物件,並 印出它們的面績 屬性 (私有): int len: 邊長 方法 (公開): int area(): 計算面績 void setLen(int n): 設定邊長 (需判斷邊長值的正確性) int getLen(): 取得邊長 使用Square類別宣告兩個邊長為10與20的物件,並 印出它們的面績

建構式與解構式 在定義類別時,您可以使用建構函式 (Constructor)來進行物件的初始化 而在物件釋放資源之前,您也可以使用「解構函 式」(Destructor)來進行一些善後的工作

建構式 思考: 由上一個輸入兩個人資料(姓名, 身高, 體重) 並印出的範例, 你希望一開始姓名為No name, 身 高與體重為0, 該如何達到此功能? 使用建構式!

建構式 #include <iostream> #include <string> using namespace std; class Person { public: Person() name = "No name"; height = 0; weight = 0; } void input() cin >> name; cin >> height; cin >> weight; void output() cout << "Name:" << name << endl; cout << "Height:" << height << " cm" << endl; cout << "Weight:" << weight << " kg" << endl; private: string name; int height; int weight; }; int main() Person p1; Person p2; //p1. input(); //p1忘了輸入 p1. output(); //p1印出No name p2. input(); p2. output(); return 0;

重載建構式 #include <iostream> #include <string> using namespace std; class Person { public: Person() name = "No name"; height = 0; weight = 0; } Person(string n, int h, int w) name = n; height = h; weight = w; void input() cin >> name; cin >> height; cin >> weight; void output() cout << "Name:" << name << endl; cout << "Height:" << height << " cm" << endl; cout << "Weight:" << weight << " kg" << endl; private: string name; int height; int weight; }; int main() Person p1; Person p2("Andy", 180, 80); p1. output(); p2. output(); return 0;

解構式 範例: 物件結束時印出ByeBye #include <iostream> #include <string> using namespace std; class Person { public: Person() name = "No name"; height = 0; weight = 0; } ~Person() cout << "ByeBye" << endl; void input() cin >> name; cin >> height; cin >> weight; void output() cout << "Name:" << name << endl; cout << "Height:" << height << " cm" << endl; cout << "Weight:" << weight << " kg" << endl; private: string name; int height; int weight; }; int main() Person p1; p1. output(); return 0;

練習 設計一個Square(正方型)類別包含下列成員: 使用Square類別宣告兩個邊長為10與20的物件,並 印出它們的面績 屬性 (私有): int len: 邊長 方法 (公開): Square(): 建構式, 將邊長設為0 int area(): 計算面績 void setLen(int n): 設定邊長 (需判斷邊長值的正確性) int getLen(): 取得邊長 使用Square類別宣告兩個邊長為10與20的物件,並 印出它們的面績

課程大綱 類別 (Class) 作業

eCash程式 要求: 設計一類別eCash模擬儲值卡的行為 私有成員: 公開成員: 主程式 屬性: Money 目前可用金額 公開成員: 方法: eCash() 建構式 (將Money初始化為0元) 方法: void store(int m) 儲值 (將m存入Money中) 方法: void pay(int m) 消費 (將Money消費m元) (提醒: 需判斷目前eCash是否有足夠的金額消費) 方法: void display() 顯示目前餘額 (將Money輸出於螢幕) 主程式 輸入’s’: 儲值 輸入’p’: 消費 輸入’d’:查詢餘額 輸入’q’: 離開程式 範例:http://www.csie.ntu.edu.tw/~d95027/train/download/eCash.exe

範例 Example:程式開始 === 歡迎使用eCash === 您好,請選擇項目: s: 儲值 p: 消費 d: 顯示餘額 q: 離開 >

範例 Example:儲值 您好,請選擇項目: s: 儲值 p: 消費 d: 顯示餘額 q: 離開 > s 請輸入儲存金額: 500 eCash: 您存了500元 您好,請選擇項目: s: 儲值 p: 消費 d: 顯示餘額 q: 離開 > s 請輸入儲存金額: -100 eCash: 請輸入大餘0的金額

範例 Example:消費 您好,請選擇項目: s: 儲值 p: 消費 d: 顯示餘額 q: 離開 > p 請輸入消費金額: 150 eCash: 您花了150元 您好,請選擇項目: s: 儲值 p: 消費 d: 顯示餘額 q: 離開 > p 請輸入消費金額: -100 eCash: 請輸入大餘0的金額 您好,請選擇項目: s: 儲值 p: 消費 d: 顯示餘額 q: 離開 > p 請輸入消費金額: 1000 eCash: 您的錢不夠

範例 Example:查詢餘額 您好,請選擇項目: s: 儲值 p: 消費 d: 顯示餘額 q: 離開 > d eCash: 您尚有350元

範例 Example:離開 您好,請選擇項目: s: 儲值 p: 消費 d: 顯示餘額 q: 離開 > q 謝謝,ByeBye! Press any key to continue

繳交 使用FTP上傳 請使用FileZilla上傳作業至指定FTP主機 繳交期限:2015. 4/11(六) 主機: 使用者名稱: 密碼: 連接埠: 將程式存到自己學號之資料夾 (請自行新增) 檔名: 251XX_hw4_##.cpp XX為學號, ##為版本編號 Ex: 25100_hw4_01.cpp (25100號同學 作業4 第1版) 請使用FileZilla上傳作業至指定FTP主機 繳交期限:2015. 4/11(六) 公佈解答後,不再收作業