C++基础1:需要了解的基础概念

1.windows api(Win32 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 等等等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容