310 likes | 537 Views
C++ 物件導向程式語言. 對象 : 程式設計的初學者 ( 第一次接觸 C 或 C++ 的學員 ). 課程網頁位址 : http://debut.cis.nctu.edu.tw/~ching. 井民全. Books. MFC/ VCL. 視窗程式設計基礎. 應用程式設計開發指南. 視窗的原理 訊息的傳遞 按鈕 , 控制項. Process 的原理 如何寫 multithread 如何使用 DLL 與 memory. 基礎 C++ 程式設計. 如何管理大量資料 Stack, LinkList, Hash Heap 等觀念. 討論各種方法的優劣
E N D
C++ 物件導向程式語言 對象: 程式設計的初學者 (第一次接觸C或C++的學員) 課程網頁位址: http://debut.cis.nctu.edu.tw/~ching 井民全
Books MFC/ VCL 視窗程式設計基礎 應用程式設計開發指南 • 視窗的原理 • 訊息的傳遞 • 按鈕,控制項 • Process 的原理 • 如何寫multithread • 如何使用DLL與memory 基礎C++程式設計 • 如何管理大量資料 • Stack, LinkList, Hash • Heap 等觀念 • 討論各種方法的優劣 • 進階的資料結構 • Graph algorithm
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)
C/C++程式語言簡介 • C語言 • 以程序為基礎的程式設計(Procedural-Based Programming) • C++語言 • 延伸自C語言. • 以物件為基礎的程式設計(Object-Based Programming) • 物件導向程式設計(Object-Oriented Programming)
程序性語言示意圖 有何不同 ? Global data Global data Function Function Function
Object Object Object Data Data Data Member Function Member Function Member Function 物件導向語言示意圖
好用的C++ 重新定義 + - * / 運算子重載 (operator overloading) 假設: A = 陣列 B=陣列 C: Sum=ADD(A,B); C++: Sum=A+B;
好用的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);
好用的C++ 自動呼叫正確的程式 問題: 我要選擇 MFC 還是 BCB的VCL ? 繼承與virtual function, 使你的程式不受限於開發工具與環境 基礎物件 (數位浮水印物件) 數位浮水印物件 MFC版本 數位浮水印物件 Linux版本 數位浮水印物件 VCL版本
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
C++ 程式語言初探 • 學習重點 • Hello world • Function • Namespace 的觀念 • 巨集定義 • 條件式編譯
開始寫程式 操作 VC #include <iostream> using namespace std; int main() { cout << “Hello world” ; } *HelloWorld 範例程式
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
跳脫序列 (Escape Sequence) cout << “Hello world \n” ; 換行
把一堆statements放到一個區塊中,該區塊稱為函式把一堆statements放到一個區塊中,該區塊稱為函式 int MyFun1() // 函式名稱 { int x = 0 ; //宣告statement x = x +1; //指派statement cout << “x的值=” << x ; //輸出statement return x; //傳回x的內容 } [傳回值的型態] [函式名稱] [參數列] [Body] Prototype 建立 Function
所以程式一定要有 main () 呼叫自訂 Function C++程式永遠從 main() 開始執行 int MyFun1(); int main(){ int location; location=MyFun1(); return 0; } 1.函式的Prototype 宣告變數,儲存呼叫function 的結果. 2.呼叫 3.傳回 0 , 告訴系統main成功完成任務.
檔案配置 函式的呼叫 int MyFun1(){ … } int MyFun1(); #include “MyFun1.h” int main(){ … MyFun1(); } 函式的實作 函式的Prototype MyFun1.h Main.cpp MyFun1.cpp 練習: 計算會傳回1加到10結果 的function
兩階段建立執行檔 第一階段: 編譯 (Compiling) Object Code Hello.cpp 前置處理器 處理 #define等 編譯程式 產生 obj 檔
Object Code Object Code Object Code 兩階建立執行檔 第二階段: 鏈結 (Linking) Link 所有的 obj code 處理 其他未處理的 symbol 產生 exe 執行檔
Namespace 補充: 使用namespace #include <iostream> void main() { std::cout << “Hello World”<< std::endl; } #include <iostream> using namespace std; void main() { cout << “Hello World”<< endl; }
Namespace 補充:如何建立自己的namespace • #incldue <iostream> • using namespace std; namespace Tom { int Sum1To3() { return 1+2+3; } } 馬上看範例:*stdHelloWorld.cpp
多註解的example • // 為單行註解的符號. • /* …*/ 為多行註解的符號. • return 代表離開函數主體並傳回一個函數定義的回返值形態(return type). int main() { …… return 0; } 練習: 02DebugComm.dsw
C++關鍵字 • C++關鍵字: • 已有固定用途, • 使用時要避免重複 • 常見的關鍵字有: • int , bool , float , return , void , switch , if , else , case , while , default , const , class , this , for , break , continue , try , catch , do , struct …等等. • [試試看]
前置處理器指令(Preprocessor Directives) • 以一個#符號開頭 • 常見的前置處理器指令如下: • #include //引入必要的宣告與定義,ex • #define // 定義常數,範例在後面 • #ifdef // 條件式編譯 • #ifndef • #endif
#define • 定義前置處理器的常數. • (習慣上是全部大寫的) • 常見的形式如下: • #define BOOK • #define BOOK 123 • #define BOOK cout<<“book”; • #define BOOK(a) a+a • 絕對值 #define ABS(X) X>0 ? X:-(X)
#ifdef,#ifndef,#endif • #ifdef DEBUG <前置處理器常數> // 若DEBUG有定義, 則編譯 #endif • #ifndef則是與#ifdef相反. • 範例程式:IfdefDemo.cpp • 練習: 03Debugifdef.dsw