+ All Categories
Home > Technology > Object-Based Programming Part II

Object-Based Programming Part II

Date post: 18-Aug-2015
Category:
Upload: pinglun-liao
View: 21 times
Download: 2 times
Share this document with a friend
Popular Tags:
42
Object-Based Programming Object-Based Programming Part II ( Part II ( 以以以以以以以以以以以 以以以以以以以以以以以 ) ) Lecturer: Liao Ping-Lun ( Lecturer: Liao Ping-Lun ( 以以以 以以以 ) ) EMail: EMail: [email protected] [email protected]
Transcript
Page 1: Object-Based Programming Part II

Object-Based Programming PObject-Based Programming Part II (art II ( 以物件為基礎的程式設以物件為基礎的程式設計計 ))Lecturer: Liao Ping-Lun (Lecturer: Liao Ping-Lun ( 廖柄㷍廖柄㷍 ))EMail: EMail: [email protected]@gmail.com

Page 2: Object-Based Programming Part II

AgendaAgendaControl Flow StatementsControl Flow StatementsLast Week Homework "Stack" SolutionLast Week Homework "Stack" SolutionFunction pointer (Function pointer ( 函式指標函式指標 ))Static Class Members (Static Class Members ( 靜態類別成員靜態類別成員 ))Constructor & Destructor (Constructor & Destructor ( 建構子與解構建構子與解構子子 ))Class Templates (Class Templates ( 類別樣板類別樣板 ))

Page 3: Object-Based Programming Part II

Control Flow StatementsControl Flow StatementsCin / coutCin / coutIf / elseIf / elseSwitchSwitchFor loopFor loopWhileWhileDo whileDo whileContinue/breakContinue/break

Page 4: Object-Based Programming Part II

簡單的互動簡單的互動 (cin/cout)(cin/cout)專案名稱:專案名稱: SeeIn_SeeOutSeeIn_SeeOut電腦:「我要跟你互動!」電腦:「我要跟你互動!」我:誰理你阿!我:誰理你阿!

Page 5: Object-Based Programming Part II

PracticePractice請使用者輸入一字元並在畫面輸出此字元的請使用者輸入一字元並在畫面輸出此字元的ASCII CodeASCII Code 。。

Page 6: Object-Based Programming Part II

判斷奇數或是偶數判斷奇數或是偶數專案名稱:專案名稱: If_ElseIf_Else

Page 7: Object-Based Programming Part II

PracticePractice判斷學生成績是否有及格。判斷學生成績是否有及格。

Page 8: Object-Based Programming Part II

你喜愛的水果是什麼?你喜愛的水果是什麼?專案名稱:專案名稱: SwitchSwitch

Page 9: Object-Based Programming Part II

PracticePractice成績評等成績評等100100 神等神等80~9980~99 優等優等60~7960~79 甲等甲等0~590~59 乙等乙等

Page 10: Object-Based Programming Part II

看星星去看星星去專案名稱:專案名稱: StarsStars

Page 11: Object-Based Programming Part II

PracticePractice印菱形印菱形

菱形大小隨意菱形大小隨意

Page 12: Object-Based Programming Part II

無窮迴圈無窮迴圈專案名稱:專案名稱: NeverStopNeverStop

Page 13: Object-Based Programming Part II

PracticePractice印菱形(請用印菱形(請用 while loopwhile loop ))

菱形大小隨意菱形大小隨意

Page 14: Object-Based Programming Part II

至少一次喔至少一次喔專案名稱:專案名稱: DoWhileDemoDoWhileDemo

Page 15: Object-Based Programming Part II

PracticePractice印菱形(請用印菱形(請用 do whiledo while ))

菱形大小隨意菱形大小隨意

Page 16: Object-Based Programming Part II

線性搜尋線性搜尋專案名稱:專案名稱: LinearSearchLinearSearch

Page 17: Object-Based Programming Part II

HWHW :求質數:求質數速度越快越好。速度越快越好。

Page 18: Object-Based Programming Part II

Last Week HW SolutionLast Week HW Solution

Page 19: Object-Based Programming Part II

Function PointerFunction Pointer函式名稱是表示什麼?函式名稱是表示什麼?ExampleExample

f(x) = xf(x) = x22

f(x) = xf(x) = x33

……....

∑ f ( x )

Page 20: Object-Based Programming Part II

PracticePracticef(x) = (x + 1)f(x) = (x + 1)33

Page 21: Object-Based Programming Part II

看動畫去看動畫去主程式的執行流程主程式的執行流程物件的記憶體配置物件的記憶體配置

Instance variableInstance variableLocal variableLocal variableInstance functionInstance functionFunction OverloadinFunction OverloadinggConstructorConstructor

Page 22: Object-Based Programming Part II

this Pointerthis PointerReference vs ValueReference vs Value

Reference Reference 只是別名,不複製一份資料只是別名,不複製一份資料Value Value 會複製一份資料。會複製一份資料。

*this *this 是一個 是一個 referencereference

Page 23: Object-Based Programming Part II

Function (Function ( 函式函式 ))函式宣告函式宣告

int sum(double, double);int sum(double, double);函式定義函式定義

int sum(double a, double b)int sum(double a, double b){{

return a + b;return a + b;}}

Page 24: Object-Based Programming Part II

Recursive Function (Recursive Function ( 遞迴函遞迴函式式 ))

Fibonacci numbersFibonacci numbers0, 1, 1, 2, 3, 5, 8, etc. 0, 1, 1, 2, 3, 5, 8, etc.

Page 25: Object-Based Programming Part II

PracticePracticeint sum(int n);int sum(int n);

Page 26: Object-Based Programming Part II

Class Class 類別類別用 用 C++ C++ 的關鍵字 的關鍵字 (keyword) class(keyword) class ,注意,注意都是小寫。都是小寫。定義出來的類別就是使用者定義的資料型態定義出來的類別就是使用者定義的資料型態(User-defined Data Type)(User-defined Data Type) 。。aObject.MemberNameaObject.MemberName

superMan.Run();superMan.Run();// // 存取 存取 member functionmember functionsuperMan->Run();superMan->Run();superMan.age;superMan.age; // // 存取 存取 member variablemember variablesuperMan->age;superMan->age;

Page 27: Object-Based Programming Part II

Class Class 類別類別在 在 C C 裡是用 裡是用 struct struct 來定義 來定義 User-defined User-defined Data TypeData Type ,如,如

struct Personstruct Person{{

int age;int age;float height;float height;float weight;float weight;

}}

但是…但是…

Page 28: Object-Based Programming Part II

class class 類別 類別 VS VS 結構 結構 structstructIn C++In C++

除了預設的存取修飾詞除了預設的存取修飾詞 (access specifiers)(access specifiers) 不不一樣外一樣外 (struct (struct 是 是 publicpublic 、、 class class 是 是 private)private) ,,其他都是一樣的。其他都是一樣的。

In CIn C沒有 沒有 class class 這鬼玩意兒。這鬼玩意兒。 (( 火星文編號一火星文編號一 ))struct struct 會跟你說,我看不懂函式。會跟你說,我看不懂函式。 (( 火星文編火星文編號二號二 ))

Page 29: Object-Based Programming Part II

Project TemplateStackProject TemplateStack為什麼要在 為什麼要在 Header File (Header File ( 表頭檔表頭檔 ) ) 定義?定義?因為 因為 VC VC 笨阿 笨阿 XDXD 。。那 那 VC 2005 VC 2005 呢?是有比較聰明了呢?是有比較聰明了,但還是得,但還是得寫在 寫在 Header FileHeader File

Page 30: Object-Based Programming Part II

Dynamic Memory AllocationDynamic Memory AllocationIn C++In C++

用 用 new new 和 和 delete delete 就行啦。就行啦。int *pInt = new int[3];int *pInt = new int[3];delete[] pInt;delete[] pInt;

In CIn Cvoid *malloc(size_t size);void *malloc(size_t size);void *calloc(size_t nmemb, size_t size);void *calloc(size_t nmemb, size_t size);void free(void *ptr);void free(void *ptr);還有其他的怪函式名稱。還有其他的怪函式名稱。

Page 31: Object-Based Programming Part II

Dynamic Memory AllocationDynamic Memory AllocationDynamicMem.cppDynamicMem.cpp不用時請記的用 不用時請記的用 delete delete 去釋放記憶體。去釋放記憶體。ReviewReviewBoundaryAlignment.cppBoundaryAlignment.cpp

記憶體配置圖記憶體配置圖靜態空間靜態空間 : Person superMan;: Person superMan;動態空間動態空間 : Person *momo = new Person;: Person *momo = new Person;

Page 32: Object-Based Programming Part II

Dynamic Memory AllocationDynamic Memory Allocation記憶體配置圖記憶體配置圖

靜態空間靜態空間 : Person superMan;: Person superMan;

動態空間動態空間 : Person *momo = new Person;: Person *momo = new Person;

ageage heightheight weightweight namename ……

ageage heightheight weightweight namename ……

momomomo

Page 33: Object-Based Programming Part II

Boundary alignmentBoundary alignment提示:提示: 4 4 的倍數、的倍數、 8 8 的倍數、成員變數順的倍數、成員變數順序有關序有關指標指標 (Pointer)(Pointer) 的大小為 的大小為 4 Bytes4 Bytes 。。

11 11 11 11 44 44 44

11 11 11 44 44 44 44 44

11 88 11 11 44 88 88 88 44 44

Page 34: Object-Based Programming Part II

Constructor (Constructor ( 建構子建構子 ))Default Constructor Default Constructor 不用參數不用參數

Person p;Person p;Normal Constructor Normal Constructor 有參數有參數

Person p("Mark");Person p("Mark");Copy ConstructorCopy Constructor由已存在的物件建立新的物件。由已存在的物件建立新的物件。什麼時候要自己改寫。什麼時候要自己改寫。

Initializer ListInitializer List

Page 35: Object-Based Programming Part II

Default Constructor (Default Constructor ( 預設建構子預設建構子 ))

Implicit default constructorImplicit default constructorPerson() {} // Compiler createPerson() {} // Compiler create

Explicit default constructorExplicit default constructorPerson() { age = 0; } // User-definedPerson() { age = 0; } // User-defined

With present valueWith present valuePerson(int newValue = 0) { age = newValue; } Person(int newValue = 0) { age = newValue; }

Ambiguity (only one constructor exist)Ambiguity (only one constructor exist)Person() { age = 0; }Person() { age = 0; }Person(int newValue = 0) { age = newValue; }Person(int newValue = 0) { age = newValue; }

Page 36: Object-Based Programming Part II

Default Constructor Default Constructor 練習練習

修改 修改 MyStack MyStack 的建構子,讓 的建構子,讓 MyStack MyStack 類類別只有一個建構子。別只有一個建構子。加上 加上 Initializer ListInitializer List 。。

Page 37: Object-Based Programming Part II

Copy Constructor (Copy Constructor ( 複製建構複製建構子子 ))

class_name(const class_name&);class_name(const class_name&);Person ycl;Person ycl;Person me(ycl); // explicitPerson me(ycl); // explicitPerson him = ycl; // implicitPerson him = ycl; // implicit實際上實際上 Person him = Person(ycl);Person him = Person(ycl);

Person he = Person(ycl); // explicitPerson he = Person(ycl); // explicitPerson *mark = new Person(ycl); // explicitPerson *mark = new Person(ycl); // explicit

Person Person 這個類別不需要自己寫複製建構子這個類別不需要自己寫複製建構子因為沒有動態配置記憶體。因為沒有動態配置記憶體。

Page 38: Object-Based Programming Part II

Copy Constructor Copy Constructor 練習練習How to write a copy constructor ?How to write a copy constructor ?

Destructor.cppDestructor.cpp實作 實作 MyStack MyStack 類別的複製建構子。類別的複製建構子。

Page 39: Object-Based Programming Part II

Destructor (Destructor ( 解構子解構子 ))~class_name();~class_name();

~Person();~Person();釋放記憶體釋放記憶體

delete variableName;delete variableName;delete [] arrayName;delete [] arrayName;若程式沒有定義解構子,編譯器會提供若程式沒有定義解構子,編譯器會提供 DefDefault Destructorault Destructor 。。靜態物件:系統自動執行。靜態物件:系統自動執行。動態物件:程式執行。動態物件:程式執行。Destructor.cppDestructor.cpp

Page 40: Object-Based Programming Part II

Project Complex ClassProject Complex ClassDefault ConstructorDefault Constructor

With default valueWith default valueCopy ConstructorCopy ConstructorOperator overloadinOperator overloadingg

operator+operator+operator-operator-operator*operator*operator<<operator<<operator>>operator>>

示範示範operator+operator+

Page 41: Object-Based Programming Part II

ReferencesReferences物件導向程式設計物件導向程式設計 http://vr.me.ncku.edu.http://vr.me.ncku.edu.tw/courses/index-oop.htmtw/courses/index-oop.htm良葛格學習筆記良葛格學習筆記 http://caterpillar.onlyfun.http://caterpillar.onlyfun.net/Gossip/index.htmlnet/Gossip/index.htmlC C 程式簡介程式簡介 http://140.127.40.1/~jwu/c/chttp://140.127.40.1/~jwu/c/cpg.htmpg.htm深度學習深度學習 C++C++http://www.math.ncu.edu.tw/~ziyou/c+http://www.math.ncu.edu.tw/~ziyou/c++/+/

Page 42: Object-Based Programming Part II

ReferencesReferencesSagit's Sagit's 電腦與生活科技電腦與生活科技 http://www.tcgs.http://www.tcgs.tc.edu.tw/~sagit/tc.edu.tw/~sagit/e-Learninge-Learning 網路教學課程網站網路教學課程網站 http://vr.mhttp://vr.me.ncku.edu.tw/courses/e.ncku.edu.tw/courses/美麗 美麗 C C 世界世界 http://dhcp.tcgs.tc.edu.tw/chttp://dhcp.tcgs.tc.edu.tw/c/index.htm/index.htm計算機程式設計計算機程式設計 http://www.csie.ntu.edu.http://www.csie.ntu.edu.tw/~cprog2002/CourseInfo/courseinfo.htw/~cprog2002/CourseInfo/courseinfo.htmltml物件導向程式設計物件導向程式設計 http://www.csie.ntu.ehttp://www.csie.ntu.edu.tw/~oop/OOP2001/index.htmldu.tw/~oop/OOP2001/index.html


Recommended