1 / 27

C++ 物件導向程式語言

C++ 物件導向程式語言. 對象 : 程式設計的初學者 ( 第一次接觸 C 或 C++ 的學員 ). 課程網頁位址 : http://debut.cis.nctu.edu.tw/~ching. 井民全. Books. MFC/ VCL. 視窗程式設計基礎. 應用程式設計開發指南. 視窗的原理 訊息的傳遞 按鈕 , 控制項. Process 的原理 如何寫 multithread 如何使用 DLL 與 memory. 基礎 C++ 程式設計. 如何管理大量資料 Stack, LinkList, Hash Heap 等觀念. 討論各種方法的優劣

Download Presentation

C++ 物件導向程式語言

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++ 物件導向程式語言 對象: 程式設計的初學者 (第一次接觸C或C++的學員) 課程網頁位址: http://debut.cis.nctu.edu.tw/~ching 井民全

  2. Books MFC/ VCL 視窗程式設計基礎 應用程式設計開發指南 • 視窗的原理 • 訊息的傳遞 • 按鈕,控制項 • Process 的原理 • 如何寫multithread • 如何使用DLL與memory 基礎C++程式設計 • 如何管理大量資料 • Stack, LinkList, Hash • Heap 等觀念 • 討論各種方法的優劣 • 進階的資料結構 • Graph algorithm

  3. Why C++ : 我們得到了甚麼好處? • 速度 : C++ > Basic > Java • 物件導向的特性: 更有彈性的設計方法 • 視窗程式設計: Windows , X Window • *驅動程式設計: VxD, WDM • 大量的資源: 網路上有大量的原始碼供你參考. • 作業系統 Linux • 工具軟體 GNU, StarOffice • JPEG, Wavelet, GIF, 影像檔(avi) • 瀏覽器Netscape的原始碼 • Mp3 原始碼 • 學習會更快速: Java, MFC, VCL, Flash, • C# (.Net Framework)

  4. C/C++程式語言簡介 • C語言 • 以程序為基礎的程式設計(Procedural-Based Programming) • C++語言 • 延伸自C語言. • 以物件為基礎的程式設計(Object-Based Programming) • 物件導向程式設計(Object-Oriented Programming)

  5. 程序性語言示意圖 有何不同 ? Global data Global data Function Function Function

  6. Object Object Object Data Data Data Member Function Member Function Member Function 物件導向語言示意圖

  7. 好用的C++ 重新定義 + - * / 運算子重載 (operator overloading) 假設: A = 陣列 B=陣列 C: Sum=ADD(A,B); C++: Sum=A+B;

  8. 好用的C++ 自動產生程式 模板 (Template) & function overloading 假設: float A,B; // 浮點數 int intA,intB; // 整數 C: fSum=floatfun(A,B); //浮點數版本 iSum=intfun(intA,intB); //整數版本 C++: fSum=fun(A,B); iSum=fun(intA,intB);

  9. 好用的C++ 自動呼叫正確的程式 問題: 我要選擇 MFC 還是 BCB的VCL ? 繼承與virtual function, 使你的程式不受限於開發工具與環境 基礎物件 (數位浮水印物件) 數位浮水印物件 MFC版本 數位浮水印物件 Linux版本 數位浮水印物件 VCL版本

  10. C++開發工具 Free Software Dev-C++: 可開發 Windows程式, DirectX (使用 GNU Compiler編譯) 網址: http://www.bloodshed.net/dev/index.html Anjuta: 開發 Linux平台視窗應用程式 網址: http://anjuta.sourceforge.net/ 一堆免費的 compiler 列表 http://www.bloodshed.net/compilers/index.html

  11. C++ 程式語言初探 • 學習重點 • Hello world • Function • Namespace 的觀念 • 巨集定義 • 條件式編譯

  12. 開始寫程式 操作 VC #include <iostream> using namespace std; int main() { cout << “Hello world” ; } *HelloWorld 範例程式

  13. C++程式檔案 程式檔案名稱=主檔名+副檔名 *.h = 一般為C或C++的header file. *.C或*.cpp = C++的程式檔 #incldue <iostream> using namespace std; int main() { cout << “Hello world” ; } #include 為前置處理器將 iostream檔案的內容讀進來. 因為cout被定義在std的 namespace 中,故有必要使用 using指定std

  14. 跳脫序列 (Escape Sequence) cout << “Hello world \n” ; 換行

  15. 把一堆statements放到一個區塊中,該區塊稱為函式把一堆statements放到一個區塊中,該區塊稱為函式 int MyFun1() // 函式名稱 { int x = 0 ; //宣告statement x = x +1; //指派statement cout << “x的值=” << x ; //輸出statement return x; //傳回x的內容 } [傳回值的型態] [函式名稱] [參數列] [Body] Prototype 建立 Function

  16. 所以程式一定要有 main () 呼叫自訂 Function C++程式永遠從 main() 開始執行 int MyFun1(); int main(){ int location; location=MyFun1(); return 0; } 1.函式的Prototype 宣告變數,儲存呼叫function 的結果. 2.呼叫 3.傳回 0 , 告訴系統main成功完成任務.

  17. 檔案配置 函式的呼叫 int MyFun1(){ … } int MyFun1(); #include “MyFun1.h” int main(){ … MyFun1(); } 函式的實作 函式的Prototype MyFun1.h Main.cpp MyFun1.cpp 練習: 計算會傳回1加到10結果 的function

  18. 兩階段建立執行檔 第一階段: 編譯 (Compiling) Object Code Hello.cpp 前置處理器 處理 #define等 編譯程式 產生 obj 檔

  19. Object Code Object Code Object Code 兩階建立執行檔 第二階段: 鏈結 (Linking) Link 所有的 obj code 處理 其他未處理的 symbol 產生 exe 執行檔

  20. Namespace 補充: 使用namespace #include <iostream> void main() { std::cout << “Hello World”<< std::endl; } #include <iostream> using namespace std; void main() { cout << “Hello World”<< endl; }

  21. Namespace 補充:如何建立自己的namespace • #incldue <iostream> • using namespace std; namespace Tom { int Sum1To3() { return 1+2+3; } } 馬上看範例:*stdHelloWorld.cpp

  22. 多註解的example • // 為單行註解的符號. • /* …*/ 為多行註解的符號. • return 代表離開函數主體並傳回一個函數定義的回返值形態(return type). int main() { …… return 0; } 練習: 02DebugComm.dsw

  23. C++關鍵字 • C++關鍵字: • 已有固定用途, • 使用時要避免重複 • 常見的關鍵字有: • int , bool , float , return , void , switch , if , else , case , while , default , const , class , this , for , break , continue , try , catch , do , struct …等等. • [試試看]

  24. 前置處理器指令(Preprocessor Directives) • 以一個#符號開頭 • 常見的前置處理器指令如下: • #include //引入必要的宣告與定義,ex • #define // 定義常數,範例在後面 • #ifdef // 條件式編譯 • #ifndef • #endif

  25. #define • 定義前置處理器的常數. • (習慣上是全部大寫的) • 常見的形式如下: • #define BOOK • #define BOOK 123 • #define BOOK cout<<“book”; • #define BOOK(a) a+a • 絕對值 #define ABS(X) X>0 ? X:-(X)

  26. #ifdef,#ifndef,#endif • #ifdef DEBUG <前置處理器常數> // 若DEBUG有定義, 則編譯 #endif • #ifndef則是與#ifdef相反. • 範例程式:IfdefDemo.cpp • 練習: 03Debugifdef.dsw

  27. End

More Related