1、C+ 物件導向程式語言,對象: 程式設計的初學者 (第一次接觸C或C+的學員),井民全,課程網頁位址: http:/debut.cis.nctu.edu.tw/ching,Books,基礎C+程式設計,視窗程式設計基礎,應用程式設計開發指南,MFC/ VCL .Net Framework,視窗的原理 訊息的傳遞 按鈕,控制項,Process 的原理 如何寫multithread 如何使用DLL與memory,如何管理大量資料 Stack, LinkList, Hash Heap 等觀念,討論各種方法的優劣 進階的資料結構 Graph algorithm,Why C+ : 我們得到了甚麼好處?,
2、速度 : C+ Basic Java JFC 物件導向的特性: 更有彈性的設計方法 視窗程式設計: Windows , X Window *驅動程式設計: VxD, WDM大量的資源: 網路上有大量的原始碼供你參考. 作業系統 Linux 工具軟體 GNU, StarOffice JPEG, Wavelet, GIF, 影像檔(avi) 瀏覽器Netscape的原始碼 Mp3 原始碼學習會更快速: Java, MFC, VCL, Flash,C# (.Net Framework),C# .Net Framework,C語言 以程序為基礎的程式設計(Procedural-Based Progra
3、mming) C+語言 延伸自C語言. 以物件為基礎的程式設計(Object-Based Programming) 物件導向程式設計(Object-Oriented Programming),C/C+程式語言簡介,程序性語言示意圖,Global data,Global data,Function,Function,Function,有何不同 ?,物件導向語言示意圖,好用的C+,運算子重載 (operator overloading)假設: A = 陣列 B=陣列C: Sum=ADD(A,B);C+: Sum=A+B;,重新定義 + - * /,好用的C+,模板 (Template) ,自動產生
4、程式,好用的C+,繼承與virtual function, 使你的程式不受限於開發工具與環境,問題: 我要選擇 MFC 還是 BCB的VCL ?,基礎物件 (數位浮水印物件),數位浮水印物件 MFC版本,數位浮水印物件 VCL版本,數位浮水印物件 Linux版本,自動呼叫正確的程式,Anjuta: 開發 Linux 平台視窗應用程式 網址: http:/ 可開發 Windows程式, DirectX(使用 GNU Compiler編譯) 網址: http:/ Software,一堆免費的 compiler 列表http:/ 程式語言初探,學習重點 Hello world Function Na
5、mespace 的觀念 巨集定義 條件式編譯,開始寫程式,*HelloWorld 範例程式,操作 VC,#include #include “c:testJing.h” using namespace std; int main() cout “Hello world” ;return 0; ,程式檔案名稱=主檔名+副檔名*.h = 一般為C或C+的header file.*.C或*.cpp = C+的程式檔,C+程式檔案,#incldue using namespace std; int main() cout “Hello world” ; ,#include 為前置處理器將 iostre
6、am檔案的內容讀進來.,因為cout被定義在std的 namespace 中,故有必要使用 using指定std,跳脫序列 (Escape Sequence),cout “Hello world n” ;,換行,建立 Function,呼叫自訂 Function,C+程式永遠從 main() 開始執行int MyFun1();int main()int location; location=MyFun1(); return 0;,3.傳回 0 , 告訴系統main成功完成任務.,所以程式一定要有 main (),2.呼叫,宣告變數,儲存呼叫function 的結果.,1.函式的Prototyp
7、e,int MyFun1() ,MyFun1.cpp,#include “MyFun1.h” int main()MyFun1(); ,Main.cpp,int MyFun1();,MyFun1.h,函式的Prototype,函式的實作,函式的呼叫,檔案配置,練習: 計算會傳回1加到10結果的function,Hello.cpp,前置處理器 處理 #define 等,編譯程式,產生 obj 檔,兩階段建立執行檔第一階段: 編譯 (Compiling),Link 所有的 obj code 處理 其他未處理的symbol,產生 exe 執行檔,兩階建立執行檔第二階段: 鏈結 (Linking),N
8、amespace 補充: 使用namespace,#include void main() std:cout “Hello World” std:endl; ,#include using namespace std; void main() cout “Hello World” endl; ,Namespace 補充: 如何建立自己的namespace,#incldue using namespace std;,namespace Tom int Sum1To3()return 1+2+3; ,馬上看範例:*stdHelloWorld.cpp,void main()Tom:Sum1To3()
9、; ,多註解的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 ,
10、try , catch , do , struct 等等. 試試看,前置處理器指令(Preprocessor Directives),以一個#符號開頭常見的前置處理器指令如下: #include /引入必要的宣告與定義,ex #define / 定義常數,範例在後面#ifdef / 條件式編譯 #ifndef #endif,#define,定義前置處理器的常數. (習慣上是全部大寫的) 常見的形式如下: #define BOOK #define BOOK 123 #define BOOK cout0 ? X:-(X),#ifdef,#ifndef,#endif,#ifdef DEBUG / 若DEBUG有定義, 則編譯#endif#ifndef則是與#ifdef相反. 範例程式:IfdefDemo.cpp 練習: 03Debugifdef.dsw,End,