结构与C程式设计进阶_第1页
结构与C程式设计进阶_第2页
结构与C程式设计进阶_第3页
结构与C程式设计进阶_第4页
结构与C程式设计进阶_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、講師:林業峻CSIE, NTU7/ 5, 2010C+與資料結構1資料結構與C+程式設計進階大綱使用類別(Class)建立資料結構使用繼承(Inheritance)建立資料結構 2類別(Class)類別class是C+中用來封裝資料的關鍵字,當您使用類別來定義一個物件(Object)時,您考慮這個物件可能擁有的屬性(Property)與方法(Method)成員屬性是物件的靜態描述方法是可施加於物件上的動態操作您使用類別定義出這個物件的規格書,之後就可依這個規格書製作出一個個的物件實例,並在製作過程中設定個別物件的專屬特性資料。要訣:屬性(該類別的變數)要存放的資料 (每個物件有自己的屬性)方法

2、(該類別的函式)寫要執行的程式 (用方法控制屬性) 3如何設計類別? 思考 (以功能角度)每個物件需要什麼資料? 宣告屬性每個物件需要什麼方法來操作資料? 設計方法進階思考 (以使用者角度)如何讓使用類別宣告物件的人方便簡單使用。如何避免使用類別宣告物件的人因用到不該用的資料而產生錯誤。 4類別(Class)宣告一個類別 (類似定義一個結構struct)語法:class 類別名稱public:類別名稱();/建構式, 用來做物件的初始化類別名稱();/解構式, 用來做物件的善後工作公開的方法或屬性; protected: / 只有在同一繼承架構中可以使用的資料受保護的方法或屬性;private

3、: / 只有在此類別中可以使用的資料私有的方法或屬性; 5資料的權限三種資料的權限設定public: 公開成員表示以下所定義的成員可以使用物件名稱直接被呼叫,稱之為protected: 受保護成員表示以下所定義的成員只可在同一繼承架構下之類別中可以使用。private:私有成員表示以下所定義的成員只可在自己的類別中可以使用。在類別封裝時,有一個基本原則是:資訊的最小化公開。如果屬性可以不公開就不公開。如果要取得或設定物件的某些屬性,也是儘量透過公開方法成員來進行。 6建構式與解構式建構式(Constructor)在定義類別時,您可以使用建構函式來進行物件的初始化。解構式(Destructor)

4、在物件釋放資源之前,您也可以使用解構函式來進行一些善後的工作。 7類別的方法之描述實作一個類別方法的內容(類似寫一個函式)除了寫在類別定義中, 也可拿到類別定義以外的地方描述語法:資料型態 類別名稱:方法名稱( 參數1, 參數2, ,參數n )程式碼; 8物件的產生與使用使用類別定義物件 (類似定義一個變數)語法:類別名稱 物件名稱;類別名稱 物件名稱( 參數1, 參數2, , 參數n );物件可透過 . 來使用或存取該方法或屬性(類似C語言的結構struct)若為物件指標,可透過 -來使用或存取該方法或屬性 9範例:製作一個2D座標類別 10class Point2D public: Poi

5、nt2D(); /建構式Point2D(int x, int y); /可傳入初始值的建構式void set(int x, int y); /設定點座標void print(); /印出點座標protected: int X; /X座標int Y; /Y座標;製作以下程式範例:Point2D.h: 定義類別Point2D.cpp: 設計類別的方法main.cpp: 主程式 Point2D.h範例:製作一個2D座標類別 11#include using namespace std;#include Point2D.hPoint2D:Point2D() X = 0; Y = 0;Point2D:P

6、oint2D(int x, int y) X = x; Y = y;void Point2D:set(int x, int y) X = x; Y = y; void Point2D:print() cout ( X , Y ) endl; Point2D.cpp main.cpp#include using namespace std;#include Point2D.hint main() Point2D p1; Point2D p2(5, 10); p1.set(20, 30);p1.print();p2.print();return 0; 範例: C+鏈結串列將第二章之鏈結串列範例改用

7、C+之類別實作(LinkedList.h , LinkedList.cpp , LinkedList_main.cpp) 12datanextnode 10 node *intnode *head node 20node 30NULLclass LinkedList練習: C+樹狀結構將第六章之二元搜尋樹範例改用C+之類別實作(BinarySearchTree.h , BinarySearchTree.cpp , BinarySearchTree_main.cpp) 13class BinarySearchTree546NULLNULLNULLNULLroot node leftdatarig

8、ht大綱使用類別(Class)建立資料結構使用繼承(Inheritance)建立資料結構 14繼承(Inheritance)繼承(Inheritance)是物件導向程式設計的一種進階觀念,繼承就是物件的再利用,當定義好一個類別後,其他類別可以繼承這個類別的成員資料和函數。語法:class 子類別名稱: 繼承權限 父類別名稱 ;在繼承的關係中被繼承的類別:父類別(Parent class)或基礎類別(Base class),繼承父類別的類別:子類別(Child class)或衍生類別(Derived class) 15範例:製作一個3D座標類別 16#include Point2D.hclass

9、 Point3D: public Point2D public: Point3D(); /建構式Point3D(int x, int y, int z); /可傳入初始值的建構式void set(int x, int y, int z); /設定點座標void print(); /印出點座標private: int Z; /Z座標;製作以下程式範例:Point2D.h: 定義2D類別 (使用之前的Point2D範例)Point2D.cpp: 設計2D類別的方法 (使用之前的Point2D範例)Point3D.h: 定義3D類別Point3D.cpp: 設計3D類別的方法main.cpp: 主程

10、式 Point3D.h範例:製作一個3D座標類別 17#include using namespace std;#include Point3D.hPoint3D:Point3D() Z = 0; Point3D:Point3D(int x, int y, int z) : Point2D(x, y) Z = z; void Point3D:set(int x, int y, int z) Point2D:set(x, y); Z = z; void Point3D:print() cout ( X , Y , Z ) endl; Point3D.cpp main.cpp#include using namespace std;#include Point3D.hint main() Point3D p1; Point3D p2(5, 10, 20); p1.set(20, 30, 40);p1.print();p2.print();return 0; 範例:C+堆疊使用C+鏈結串列以繼承方式實作堆疊(Stack.h , Stack.cpp , Stack_main.cpp) 18datanextnode 10 node *intnode *head node 20node 30NULLclass Linked

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论