C/C++基礎程式設計班 C++:物件導向程式設計 類別的使用 (Class)

Slides:



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

計算機程式語言實習課.
第九讲 类与对象 (I)面向对象基础.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
C++入門 以Dev C++為例.
File Access 井民全製作.
第八章 类和对象.
1 Department of Computing.
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
走向C++之路 WindyWinter WindyWinter感谢诸位前来捧场。
LINQ 建國科技大學 資管系 饒瑞佶.
Java簡介.
簡易C++除錯技巧 長庚大學機械系
資料大樓 --談指標與陣列 綠園.
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板
第一章 程序的基本结构. 第一章 程序的基本结构 教材及授课结构 本章目标 基本内容 扩展阅读 上机指导 应用举例 习题.
C語言簡介 日期 : 2018/12/2.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
程式設計(二) 進階類別 郭文真 Sabrina Kuo.
C++程序设计 string(字符串类) vector(容器类).
第七章 檔案處理.
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Instructor Textbook Requirements TAs C++程式設計風格與藝術 (O’Reilly).
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
Topic Introduction—RMI
第一單元 建立java 程式.
10 多載函數 10.1 多載概論 多載一般函數 多載成員函數 10-3
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
第 19 章 XML記憶體執行模式.
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++: 物件導向程式設計-使用類別(Class)
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
挑戰C++程式語言 ──第8章 進一步談字元與字串
物件導向程式設計 CH2.
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
樣版.
Object-Oriented Programming in C++ 第二章 类和对象
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++程式設計入門 變數與運算子 作者:黃建庭.
OOP9 類別Class.
MiRanda Java Interface v1.0的使用方法
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
函數應用(二)與自定函數.
陣列與結構.
第 3 章 类的基础部分 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
What is “this”? 在物件導向程式設計中,類別的定義就是在說明如果創建了“這個物件”的話,它會具有那些屬性與功能,以及這些功能是如何實現的。 而所謂的“這個物件”就以 this 來表示。 當我們在JavaScript與jQuery中寫 script 程式(函式)時,“誰”呼叫這個函式,這個“誰”就是該函式中所謂的.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
C++语言程序设计(第4版) 第七章 继承与派生 数学与统计科学学院 胡凤珠.
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
變數與資料型態  綠園.
資料!你家住哪裏? --談指標 綠園.
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
方法(Method) 函數.
InputStreamReader Console Scanner
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

C/C++基礎程式設計班 C++:物件導向程式設計 類別的使用 (Class) 講師:鄒尚軒, 8/15, 2013

課程大綱 物件導向 類別 類別的構成 類別的成員 類別的權限 建構子與解構子 程式的分割

物件導向 以物件為基礎的程式設計方式,將程式中各個 互動的部分視為物件 物件最重要的概念:資料封裝(Encapsulation) 資料封裝是指:將物件的資料以及運作都藏於物件 之中,使用者並不知曉物件如何運作 而定義物件的屬性(Attribute)以及行為(Method)是程 式設計師的工作 而物件便是依照類別這份規格表所產生的實體

物件的例子 真實世界:一台電腦就是一個物件 C++世界:string str,str就是一個物件,string是 類別 他有CPU、記憶體、硬碟等屬性 他能放音樂、放影片、玩遊戲等這些行為 可是我們不知道它裡面是怎麼跑的 C++世界:string str,str就是一個物件,string是 類別 他有字串內容、長度這些屬性 他能回報長度、回傳子字串等行為

課程大綱 物件導向 類別 類別的構成 類別的成員 類別的權限 建構子與解構子 程式的分割

類別(class) 類別(class)是C++中用來定義物件屬性與行為的設 計圖 使用類別定義物件時,考慮物件可能有的「屬性」 和「行為」 屬性是物件擁有的一些靜態特性 行為是可以對物件或是物件本身的一些動作 定義類別後,我們便可以利用它產生物件 要訣: 屬性:宣告存放的資料(成員資料) 行為(方法):實作物件的行為(成員函式)

類別的宣告 宣告類似結構 class 類別名稱 { public: //公開可用的部分 類別名稱(); //建構子 ~類別名稱();//解構子 公開的方法或是資料 private: //只有類別本身可使用的 受保護的資料或是方法; protected: //繼承類別才能使用的 // 這不會教 };

物件的產生與使用 物件使用前需要宣告,與一般變數無異 語法: 宣告物件後,可使用 . 來存取或使用類別的資 料或方法 類別名稱 物件名稱; 類別名稱 物件名稱(參數1, 參數2...); 宣告物件後,可使用 . 來存取或使用類別的資 料或方法 若為物件指標,需使用 -> 來使用物件的資料或 是方法 使用方法皆類似C的結構

一個簡單的範例 #include <iostream> #include <string> #include <cstdlib> using namespace std; class Dog { public: int year; string type; Dog(string t, int y) { type = t; year = y; } void bark() { cout << "Hello world." << endl; int howOld() { return year; string whatType() { return type; }; int main() { Dog dog("馬爾濟斯", 2); dog.bark(); cout << dog.howOld() <<endl; cout << dog.whatType() <<endl; system("pause"); return 0;

課程大綱 物件導向 類別 類別的構成 類別的成員 類別的權限 建構子與解構子 程式的分割

如何設計類別 第一步:物件的規格 第二步:物件的封裝 第三步:物件的關係(內容較進階) 物件需要哪些資料 物件需要哪些行為 那些資料需要公有、那些卻得是私有 第三步:物件的關係(內容較進階) 物件間的關係 ...

物件需要哪些資料 定義一個物件所需要的資料需要符合他的屬性, 例如:狗需要品種以及年齡 這些資料在C++中稱為成員資料 成員資料代表一個物件的屬性及他的內容 如:string裡面存的字串就是成員資料 成員資料可以是任何型態、結構類型甚至是類 別型態的變數或物件 宣告方法與一般宣告變數、結構、物件一樣

物件需要哪些行為 定義某些行為,讓物件可以透過這些行為改變 成員資料,或是做出一些動作,此稱成員函式 成員函式可宣告於類別內,在類別外實作,也 可在類別內直接實作,另外成員函式可以重載 語法與函式類似: //類別內實作 資料型態 方法名稱( 引數1, 引數2, … , 引數n ) {   程式碼; } //類別內宣告,類別外實作 資料型態 類別名稱::方法名稱( 引數1, 引數2, … , 引數n ) {   程式碼; }

練習 設計一個Rectangle(長方形)類別,須包含: 成員資料: 成員函式: int length, width; //長寬 成員函式: int area(); //回傳面積 產生長方形物件(eg. Rectangle rect;)後,使用 rect.length = 10;,設定好長寬,再以計算面積 的函式回傳面積並印出來

練習範例解答 #include <iostream> #include <cstdlib> using namespace std; class Rectangle { public: int length, width; int area() { return length*width; } }; int main() { Rectangle rect1; rect1.length = 20; rect1.width = 10; cout << "Area = " << rect1.area() << endl; system("pause"); return 0;

如何設計類別 第一步:物件的規格 第二步:物件的封裝 第三步:物件的關係(內容較進階) 物件需要哪些資料 物件需要哪些行為 那些資料需要公有、那些卻得是私有 第三步:物件的關係(內容較進階) 物件間的關係 ...

課程大綱 物件導向 類別 類別的構成 類別的成員 類別的權限 建構子與解構子 程式的分割

想想看 若是網路上所有的帳戶都是一個個物件,那你 希望被別人看到或改變自己的資料嗎? 所以設定好權限是很重要的 帳號:可能需要被別人看到,但不希望人家改變 密碼:絕對不能讓別人看到,也不能讓別人改動 個人資料:有些可以讓別人看到,有些則不能 所以設定好權限是很重要的

C++的資料權限 public:公開的資訊,屬於public的成員資料、 函式都可以直接被外界使用,而這些成員我們 稱之「公開成員」 private:私人的資訊,屬於private的成員資料、 函式,都只能在這個類別內使用,外界無法碰 觸,稱之「私有成員」 C++資料封裝的原則:資訊最小化公開,能不 公開就不公開,需要公開時盡量使用方法(成員 函式)進行

C++的資料權限 想要使用或改變物件內的資料,有個簡單的小 原則:get and set get:建立get成員函式,回傳私有資料,並且這份 回傳的資料必須是副本(跟原本的資料沒關係) set:建立set成員函式,讓使用者透過set函式,對 私有的資料進行有限的更動,通常一個set函式只能 針對一項成員資料進行更動 若不想更動物件內容時,可捨去set函式

例如.... #include <iostream> #include <cstdlib> using namespace std; class Rectangle { public: int length, width; int area() { return length*width; } }; int main() { Rectangle rect1; rect1.length = 20; rect1.width = 10; //可以被外界作任意更改 cout << "Area = " << rect1.area() << endl; system("pause"); return 0;

範例 #include <iostream> #include <cstdlib> using namespace std; class Rectangle { public: void setWidth(int w) { width = w; } int getWidth() { return width; void setLength(int l) { length = l; int getLength() { return length; int area() { return length*width; private: int length, width; }; int main() { Rectangle rect1; rect1.setLength(20); rect1.setWidth(10); cout << "Area = " << rect1.area() << endl; system("pause"); return 0;

練習 設計一個Circle(圓)類別,其中包含: 成員資料: 成員函式: int radius; //半徑 void setRadius(int r);//設定半徑 int getRadius();//取得半徑 double area();//回傳面積,圓面積=半徑x半徑x3.14

如何設計類別 第一步:物件的規格 第二步:物件的封裝 第三步:物件的關係(內容較進階) 這裡就已經是物件的很大的基礎了 物件需要哪些資料 物件需要哪些行為 第二步:物件的封裝 那些資料需要公有、那些卻得是私有 第三步:物件的關係(內容較進階) 物件間的關係 ... 事實上,第三步要前兩步都非常熟悉後才能使用及理解,而且這部分有永遠吵不完的架.....

課程大綱 物件導向 類別 類別的構成 類別的成員 類別的權限 建構子與解構子 程式的分割

建構子與解構子 在建立物件時,可以利用類別所定義的建構子 (constructor)初始化物件 而在物件釋放或消失前,可以利用類別定義的 解構子(destructor)進行善後的工作,如:釋放記 憶體

建構子 假設希望一開始就有一個長寬各為20、10的長 方形,我們應該如何處理? 建構子的宣告:類別名稱(參數1,參數2...) 使用建構子初始化 建構子的宣告:類別名稱(參數1,參數2...) 注意:建構子沒有回傳值!

範例 #include <iostream> #include <cstdlib> using namespace std; class Rectangle { public: Rectangle(int l, int w) { width = w; length = l; } void setWidth(int w) { int getWidth() { return width; void setLength(int l) { int getLength() { return length; int area() { return length*width; private: int length, width; }; //建立物件的方法: // Rectangle rect1(20, 10);

重載建構子 當你只有宣告有傳入參數的建構子時,建立物 件的時候必定要傳入參數,也就是要初始化物 件 但若是我有時候想要傳入參數,有時候又不想 怎麼辦? 解法:重載沒有參數的建構子 Rectangle()

範例 #include <iostream> #include <cstdlib> using namespace std; class Rectangle { public: Rectangle() { length = width = 0; } Rectangle(int l, int w) { width = w; length = l; void setWidth(int w) { int getWidth() { return width; void setLength(int l) { int getLength() { return length; int area() { return length*width; private: int length, width; }; //建立物件的方法: // Rectangle rect1(20, 10); // Rectangle rect2; // rect1 初始邊長 20 與 10 // rect2 初始邊長 0 與 0

解構子 在物件消失或是結束後,裡面有動態記憶體配 置的空間,我們需要釋放這些空間 解構子的宣告:~類別名稱() 使用解構子 解構子負責善後 解構子的宣告:~類別名稱() 注意:解構子沒有回傳值,也沒有參數

範例 #include <iostream> #include <cstdlib> using namespace std; class Rectangle { public: Rectangle() { length = width = 0; } Rectangle(int l, int w) { width = w; length = l; ~Rectangle() { cout << "Q___Q\n"; void setWidth(int w) { int getWidth() { return width; void setLength(int l) { int getLength() { return length; int area() { return length*width; private: int length, width; }; // 物件結束時會印出哭臉

課程大綱 物件導向 類別 類別的構成 類別的成員 類別的權限 建構子與解構子 程式的分割

程式碼的分割 當在設計程式時,若是程式的函式、類別、資 料等程式碼非常多時,我們會將宣告與實作分 開至不同檔案 如:stdio.h:這裡面只有宣告,實作在別的地方 *.h:標頭檔,只放置宣告的檔案 *.c/*.cpp:實作檔,編譯時會加入整隻程式一起 編譯

範例:分割Rectangle Rectangle.h Rectangle.cpp class Rectangle { public: #include "Rectangle.h" Rectangle::Rectangle() { length = width = 0; } Rectangle::Rectangle(int l, int w) { width = w; length = l; void Rectangle::setWidth(int w) { int Rectangle::getWidth() { return width; void Rectangle::setLength(int l) { int Rectangle::getLength() { return length; int Rectangle::area() { return length*width; class Rectangle { public: Rectangle(); Rectangle(int l, int w); void setWidth(int w); int getWidth(); void setLength(int l); int getLength(); int area(); private: int length, width; };

範例:分割Rectangle main.cpp #include <iostream> #include "Rectangle.h" using namespace std; int main() { Rectangle rect(20, 10); cout << "Area = " << rect.area() << endl; system("pause"); return 0; }