版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 OOP9 類別Class 2 物件導向式問題分析物件導向式問題分析 傳統的程式設計方式傳統的程式設計方式- -程序導向式的設程序導向式的設 計方法計方法 功能為何功能為何? ? 那些程序可以完成這些功能那些程序可以完成這些功能? ? 物件導向式的設計方法物件導向式的設計方法 找出物件找出物件(Object)(Object) 物件就是物件就是”東西東西” 訊息傳遞訊息傳遞(Message Passing)(Message Passing) 3 物件導向程式語言物件導向程式語言 物件導向語言物件導向語言(OOP)(OOP),主要用來描述一個物,主要用來描述一個物 件件(Object)(Obje
2、ct)的類別的類別(Class)(Class),以及如何達成,以及如何達成 所謂動態繫結所謂動態繫結(Dynamic Binding) (Dynamic Binding) 、同名異、同名異 式式(Polymorphism)(Polymorphism)、覆蓋、覆蓋(Override)(Override)、覆載、覆載 (Overload)(Overload)、類別的繼承、類別的繼承(Inheritance)(Inheritance)等等 等機制等機制 常見的物件導向程式語言常見的物件導向程式語言 C+C+ JavaJava SmalltalkSmalltalk ObjectPascalObject
3、Pascal 4 Object 類別Class objects attribute(物件的屬性) 有2個 Data(資料), property (Java中稱為field) 又稱”成員變數”Member variable (或data variable) Method 又稱”成員函數” Member function 5 物件導向程式語言物件導向程式語言 物件導向程式語言的優點物件導向程式語言的優點 模組化設計模組化設計(Module Design) 獨立且合作獨立且合作 容易維護容易維護(Easy to maintain) 可重複使用可重複使用Reuse / Software IC 6 本章
4、主題本章主題 類別類別(Class)的宣告的宣告 操作成員操作成員(Operator Member)(Operator Member)的定義與的定義與 行內函式行內函式(Inline function)(Inline function) 建構元建構元(Constructor)(Constructor)與解構元與解構元 (Destructor)(Destructor) 合成使用類別合成使用類別 靜態的類別成員靜態的類別成員 類別類別Class 7 類別的宣告類別的宣告 回顧結構回顧結構(struct(struct) )定義定義 【結構定義範例】 s st tr ru uc ct t Date i
5、nt year; int month; int day; ; struct 為保留字 Date 為結構的名稱 8 類別的宣告類別的宣告 class 類別名稱 private: 型別 成員資料 ; public: 傳回值 成員函式1(傳入值); 傳回值 成員函式2(傳入值) /成員函式2 為一連線函式。 /程式碼 ; 傳回值 類別名稱:成員函式1(傳入值) /程式碼 類別名稱 變數名稱1; 類別名稱 變數名稱2; 變數名稱1.成員函式1(傳入值); 9 類別的宣告類別的宣告 【類別定義範例】 c cl la as ss s Date p pu ub bl li ic c: Date(); voi
6、d setDate(int, int, int); void printDate(int); p pr ri iv va at te e: int year; int month; int day; ; class 為保留字 Date 為類別的名稱 須以分號結束類別的定義 資料成員的定義 操作成員的定義 10 類別的使用類別的使用 Date Today, *ptrDate, Holiday15; 類別變數類別變數 - - 案例案例/ /物件物件 【 錯 誤 的 語 法 】 Today - year = 2001; ptrDate.year = 2001; cout year; publicpu
7、blic與與privateprivate存取等級存取等級 不允許直接存取不允許直接存取privateprivate資料成員資料成員 11 操作成員的定義 操作成員的定義: 定義函式的內容 【程式範例】 / 程式名稱: oop_12_2.cpp / 程式功能: 定義一個 Date 類別,設定其變數值,並將之印出來 /printDate操作成員,用來印出資料成員的內容 void Date:printDate(int type) /可以直接存取private資料成員 if(type=WEST) cout MNamemonth-1 day , year; if(type=EAST) cout year
8、/ month / day; /setDate操作成員,用來改變資料成員的內容 void Date:setDate(int y, int m, int d) /可以直接存取private資料成員 year = y; month = m; day = d; 12 行內函式行內函式 行內函式: 將操作成員的定義(函式的 內容)寫在類別的定義中 c cl la as ss s Date p pu ub bl li ic c: Date() year=month=day=0 ; void setDate(int y, int m, int d) year=y; month=m; day=d; ; vo
9、id printDate(int); p pr ri iv va at te e: int year; int month; int day; ; 13 行內函式行內函式 行內函式: 將操作成員的定義(函式的 內容)寫在類別的定義之中 c cl la as ss s Date p pu ub bl li ic c: Date() year=month=day=0 ; void setDate(int y, int m, int d) year=y; month=m; day=d; ; void printDate(int); p pr ri iv va at te e: int year; i
10、nt month; int day; ; 14 行內函式行內函式 使用inline保留字將操作成員定義成為 行內函式 inline void Date:printDate(int type) /可 以直接 存取private資料成 員 if(type=WEST) cout MNamemonth-1 day , year; if(type=EAST) cout year/ month / day; 15 建構元(Constructor) 建構元是與類別同名稱的成員函式 (member function),主要是用來進行 資料成員的初始值設定(Initial value setting) 一個類別
11、可以定義多個建構元,用以提 供不同的初始化方式 建構元是不允許指定函式回傳資料型態 16 建構元(Constructor) class 類別名稱 private: 型別 成員資料 ; public: 類別名稱( void ); / 建構子函式1 類別名稱(傳入值); / 建構子函式2 傳回值 成員函式1(傳入值); 傳回值 成員函式2(傳入值) /成員函式2 為一連線函式。 /程式碼 類別名稱( ); /解構元函式 ; 類別名稱 變數名稱1; /會呼叫建構子函式1 類別名稱 變數名稱2(傳入值); /會呼叫建構子函式2 17 預設引數建構元預設引數建構元 當呼叫建構元時,若無提供足夠的參 數值
12、,建構元會以預設的引數值做為 初始值 【程式範例】 / 程式名稱: oop_12_3.cpp / 程式功能: 定義一個Date類別,以預設引數建構元初始化資料成員 c cl la as ss s Date p pu ub bl li ic c: Date(int=0, int=0, int=0); /預設引數建構元 void setDate(int, int, int); void printDate(int); p pr ri iv va at te e: int year; int month; int day; ; 18 解構元(DeConstructor) 解構元的名稱與建構元相同,但
13、名稱 前面須加上 符號 解構元的作用與建構元剛好相反,它 主要用來釋放物件所佔用的記憶體空 間 解構元不接受任何參數,也不傳回任 何值 一個類別只允許定義一個解構元 19 解構元 範例 【程式範例】 / 程式名稱: oop_12_4.cpp / 程式功能: 說明解構元如何清除資料成員所佔用的記憶體 c cl la as ss s GiveMeMemory p pu ub bl li ic c: GiveMeMemory(); /建構元 GiveMeMemory(); /解構元 void printData(); p pr ri iv va at te e: int *memory; int m
14、ind; ; int main(void) GiveMeMemory M; /呼叫建構元配置記憶體並設定初始值 M.printDate();/印出資料成員內容 return 0; /結束 main()之前,呼叫解構元 20 解構元 範例 GiveMeMemory:GiveMeMemory() memory = new int10; /要 求 記 憶 體 空 間 給memory for(int i=0; i10; i+) memoryi=i+1; /設 定memory的 初 始 值 mind = 100; /設 定mind的 初 始 值 GiveMeMemory:GiveMeMemory() d
15、elete memory; /清 除memory所 佔 領 的 記 憶 體 空 間 cout “ nI am out!” ; 21 合成使用類別 在一個類別中使用其他類別作為其資 料成員的一員 【程式範例】 / 程式名稱: oop_12_6.cpp / 程式功能: 定義一個MemorialDay類別,記錄紀念日的日期 #include oop_DATE_5.h /引用Date類別 #include class MemorialDay public: MemorialDay(char *, int, int, int); void list(); private: char nameMD30;
16、/紀念日名稱 Date memorialDay; /紀念日 ; 22 靜態的類別資料成員靜態的類別資料成員 靜態(Static)資料成員: 所有的類別 案例共用一個資料 【程式範例】 / 程式名稱: oop_12_7.cpp / 程式功能: 定義一個 MemorialDay 類別,記錄紀念日的日期 #include oop_DATE_5.h /引用 Date 類別 #include class MemorialDay public: MemorialDay(char *, int, int, int); MemorialDay(); void list(); static int numDay
17、s(void); /傳回靜態資料值 private: char nameMD30; /紀念日名稱 Date memorialDay; /紀念日 static int NumOfDays; /靜態資料成員 ; 23 靜態的類別資料成員靜態的類別資料成員 class 類別名稱 private: 型別 成員資料 ; static 型別 靜態成員資料 ; /只有宣告而 己 public: 傳回值 成員函式1(傳入值); ; 型別 類別名稱:靜態成員資料 ; /定義靜態成 員資料 24 靜態資料成員靜態資料成員 /在主程式之前必須初始化靜態資料成員 int MemorialDay:NumOfDays = 0; int main(void) /沒有案例時,仍然可以取得靜態資料成員的值 cout 總共有 MemorialDay:numDays() 個紀念日 endl; MemorialDay *Day1 = new MemorialDay(端午節, 2002, 6, 15); MemorialDay MoonFestival(中秋節, 2002, 9, 21); cout 總共有 numDays() 個紀念日 list(); MoonFestival.list(); delete Day1; cout 總共有 MoonFestival.numDays
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 采煤工作面回撤安全技术措施培训课件
- 第10课 集字练习(三)教学设计小学书法湘美版六年级下册-湘美版
- 湖南省2026年普通高中生物学业水平合格性考试仿真卷试题
- 电力建设现场安全文明施工与健康环境管理培训
- 电镀锌杂质污染故障分析及排除方法培训
- 财务部确认季度报销单审核函4篇
- 食品安全与健康饮食管理手册
- 大学物理竞赛试题及答案
- 2026学年内蒙古自治区牙克石市三年级语文期末评估高频易错题(详细参考解析)详细答案和解析
- 创新思维的培养小学主题班会课件:头脑风暴与创意展示
- 生鲜运输仓库管理办法
- 2024副高(内科护理)考试真题卷及答案
- 私募基金合规管理与招募说明书模板
- 2025年北京朝阳区高二(下)期末化学试题和答案
- 山东省泰安市第一中学2024-2025学年高一下学期6月月考化学试卷
- 人工智能教育应用(北师大)2024学堂在线雨课堂网课章节测试答案和期末考试答案
- 机械行业重点岗位安全手册
- T/CA 105-2019手机壳套通用规范
- 《腰腿疼痛的针灸治疗》课件
- 2025超声造影增强剂市场分析
- 施工用电临时设施危险源辨识及重大危险源清单
评论
0/150
提交评论