c++基礎1:需要了解的幾點重要概念

1.windows api:【使用VS,其頭文件在C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include】WIN32 API也就是Microsoft Windows 32位平臺的應用程序編程接口。我們對待API函數不必刻意去研究每一個函數的用法,那也是不現實的(能用得到的API函數有幾千個呢)。正如某位大蝦所說:API不要去學,在需要的時候去查API幫助就足夠了。但是,許多API函數令人難以理解,易於誤用,還會導致出錯,這一切都阻礙了它的推廣。windows sdk:微軟每推出一個重要的windows版本,一般都會同時推出一個SDK(Software Development Kit)。SDK包含了開發該windows版本所需的windows函數和常數定義、API函數說明文檔、相關工具和示例。SDK一般使用C語言,但不包括編譯器。高版本VC++包括了SDK所有的頭文件、幫助、示例和工具,不需要再安裝SDK。

2.c標準函數庫【使用VS,其頭文件在C:\Program Files\Microsoft Visual Studio 10.0\VC\include】使用C函數庫的時候只需要包含#include頭文件就能使用

3.c++標準函數庫【使用VS,其頭文件在C:\Program Files\Microsoft Visual Studio 10.0\VC\include】使用C++函數庫的時候不僅需要包含#include頭文件,而且還要引入命名空間,例如using namespace std;

4.mfc:.【使用VS,其頭文件在C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include】是一個微軟公司提供的類庫(class libraries),以C++類的形式封裝了Windows的API,並且包含一個應用程序框架,以減少應用程序開發人員的工作量。其中包含的類包含大量Windows句柄封裝類和很多Windows的內建控件和組件的封裝類

5.atl(開發COM和ActiveX組件的C++動態模板庫):atl是微軟atl小組開發的,ATL是一個產生C++/COM代碼的框架,就如同C語言是一個產生彙編代碼的框架。ATL又不同於MFC,它完全面向COM組件,其技術路線也不同於MFC,MFC使用的是C++中的繼承、封裝、嵌套等常規技術,而ATL使用了C++中模板、多繼承等高級技術,甚至還用到了STL。所以學習和使用ATL要求我們必須熟悉這些C++高級特性。另一方面,ATL結構完全針對COM中的諸多規範,這就要求使用人員必須非常瞭解COM規範,纔有可能真正把ATL用好

誕生原因:Microsoft公司在推出COM SDK以後,爲簡化COM編程,提高開發效率,採取了許多方案,特別是在MFC(Microsoft Foundation Class)中加入了對COM和OLE的支持。但是隨着Internet的發展,分佈式的組件技術要求COM組件能夠在網絡上傳輸,而又儘量節約寶貴的網絡帶寬資源。採用MFC開發的COM組件由於種種限制不能很好地滿足這種需求,因此Microsoft在1995年又推出了一種全新的COM開發工具ATL。

在ATL產生以前,開發COM組件的方法主要有兩種:一是使用COM SDK直接開發COM組件,另一種方式是通過MFC提供的COM支持來實現。

首先ATL的基本目標就是使COM應用開發儘可能地自動化,這個基本目標就決定了ATL只面向COM開發提供支持。其次,ATL因其採用了特定的基本實現技術,擺脫了大量冗餘代碼,使用ATL開發出來的COM應用的代碼簡練高效,即所謂的“Slim Code”。第三,ATL的各個版本對Microsoft的基於COM的各種新的組件技術如MTS、ASP等都有很好的支持,ATL對新技術的反應速度大大快於MFC。ATL已經成爲Microsoft支持COM應用開發的主要開發工具,因此COM技術方面的新進展在很短的時間內都會在ATL中得到反映。這使開發者使用ATL進行COM編程可以得到直接使用COMSDK編程同樣的靈活性和強大的功能。

6.wtl(Windows Template Library):wtl是微軟atl小組開發的,誕生原因:在ATL出現的時候,一些部分COM的編程人員開始覺得開發COM運用是一種快樂,因爲使用它很方便地開發小規模的COM組件,但好景不長,現實的COM組件是包羅相當廣泛的,特別當它們準備使用窗口控件,發現ATL提供的相當的稀少。因此Microsoft推出了半成品與沒有技術支持的WTL,這也是WTL誕生的原因。主要原因是用原始的 WIN32 API 編寫漂亮的用戶界面工作量大,繁雜。MFC 雖然提供了一套很好的封裝,但是也不是很容易消化和使用,特別是各個MFC 類之間耦合很緊,要用好 MFC 就要理解很多 MFC 內在的運行機制(有人說 MFC 的封裝是“白盒”封裝,呵呵)。WTL 利用 C++ 模版的高級功能,提供很聯繫很鬆散的“獨立”的類庫,使用起來比較方便,而且代碼體積小,不必爲了學習某個類必須學習一大堆相關的類。

特點:1.模板化,因此有較小的代碼量。例如,一個簡單的“hello world”SDI應用程序,基於WTL的程序只有24KB,而MFC靜態連接結果是440KB,MFC動態連接的結果是24KB+1MB。    2.無太多相關性,並且可以自由地和SDK代碼直接混合。   3.不會強迫使用特定的應用程序模型,尤其相對於MFC的應用程序框架。

WTL類包括
標準控制(編輯框,列表框,按鈕等等)
公共控制(包括列表視圖,樹形視圖,進度條,微調按鈕)
IE控制(rebar,平面滾動條,日曆等等)
命令條,菜單,和更新UI類
公共對話框
屬性單和頁類
框架窗口,MDI框架和子框架,分隔條,可滾動的窗口
設備環境(DC)和GDI對象類(筆、刷子、位圖等)
打印機及其信息和設備模式類

實用工具類:包括CPoint, CRect, CSize, 和CString類

7.stl(標準C++程序開發的模板庫):STL是惠普實驗室開發的一系列軟件的統稱,作爲ANSI/ISOC++的一部分,已經被C++標準委員會正式採納,STL的一個重要特點是數據結構和算法的分離,這使其非常通用。另一個重要特性爲不是面向對象的,爲了實現通用性。


STL有6大組件algorithm(算法)、container(容器)和iterator(迭代器),function object(函數對象)、adaptors(適配器)和allocator(記憶體配置器),其中最主要的是前三個組件。從根本上說,STL是一些“容器”的集合,這些“容器”有list,vector,set,map等,STL也是算法和其他一些組件的集合。這裏的“容器”和算法的集合指的是世界上很多聰明人很多年的傑作。


在C++標準中,STL被組織爲下面的13個頭文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。
算法部分主要由頭文<algorithm>,<numeric>和<functional>組成。
容器部分主要由頭文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>組成。
迭代器部分主要由頭文件<utility>,<iterator>和<memory>組成。
 

STL的容器可以分爲以下幾個大類: 
一:序列容器, 有vector, list, deque, string.

二 : 關聯容器,     有set, multiset, map, mulmap, hash_set, hash_map, hash_multiset, hash_multimap

三: 其他的雜項: stack, queue, valarray, bitset

STL的目的是標準化組件,這樣你就不用重新開發它們了。你可以僅僅使用這些現成的組件。STL現在是C++的一部分,因此不用額外安裝什麼。

STL算法是標準算法,我們可以把它們應用在那些容器中的對象上。這些算法都有很著名的執行特性。它們可以給對象排序,刪除它們,給它們記數,比較,找出特殊的對象,把它們合併到另一個容器中,以及執行其他有用的操作

8.afx(微軟AFX小組開發的):以afx開頭的函數不能說是MFC的全局函數,而是MFC的類函數。當初這個小組打算建立一個可以跨linux和windows平臺的設計軟件,結果失敗了,遺留了大量的函數以afx命名,最終用類的概念建立了MFC的框架,所以現在MFC之中有很多afx函數,這些函數可以用API函數替代。AFX 小組預期MFC 的使用者不可能人人皆爲C++ 專家,所以他們並沒有採用所有的C++高階性質(例如多重繼承)。許多「麻煩」但「幾乎一成不變」的Windows程序動作都被隱藏在MFC 類別之中, 例如WinMain、RegisterClass、Window Procedure 等等等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章