文章标题

来源:互联网 发布:python区分单双引号吗 编辑:程序博客网 时间:2024/05/21 19:22
  • IDE 选择

我比较喜欢的选择是 Qt Creator(注意下载 Qt SDK 时选择 mingw 版本,其中自带 gcc 编译工具链)。而且这个选择是跨平台的,也可以在 Linux 、 Mac OS X上使用。

Windows 下还有一个不错的选择—— VS 2013或更高版本,对 C++11 支持还算不错(不如 gcc )。

  • C++ 语言的学习

结合 C++ 的知识图谱,对 C++ 语言的学习,建议顺序:
基础语言
类与面向对象
输入输出
字符串处理(类库和正则表达式)
容器类库
泛型算法
多线程
原子操作

  • 基础语言

这部分要了解 C++ 语言的基本数据类型、比如 int 、 char 、 bool 、 unsigned int 、 long 、 float 、 double 、 、 long long 、 enum 、 union 等等。能理解指针、引用等概念。

掌握基本的编程语法,比如表达式、运算符、函数等。关于函数,多说两句,C++ 里有函数对象,在标准库里广泛应用,需要了解;另外 C++11 支持 lambda 表达式(匿名函数),威力强大,建议学习。不过这两点可以稍往后放放。

主要的语言结构,比如 if-else 、 for 、 switch-case 、 while 、 do-while等。

  • 类与面向对象

了解 class 的概念,了解继承、虚函数、重载、重写、多态、纯虚函数、多重继承等概念,它们是面向对象编程在语言层面的基础。
面向对象更重要的是思想,很多 C 系程序员一直都在用类来写过程式程序。

  • 输入输出

要做编程练习,了解基本的输入输出操作是必须的。
C++ 里输入输出分 C 和 C++ 两部分。C 风格的 printf 系列函数、 FILE 、 fopen 、 fread 、 fwrite 等等或 C++ 风格的 istream 、 ostream 、 iostream 、 ifstream 、 ofstream 、 fstream等都可以完成输入输出操作 。

  • 字符串处理

字符串处理是我们编程时使用频率最高的,C++ 里有 C 风格的字符串库,比如 strcmp 、 strcpy 、 strstr 、 strchr 等函数,也有更为方便和智能的字符串类,如 string 、 wstring 等,看看 API ,练习一下就可以掌握。

C++11 为了更方便字符串处理,提供了正则表达式类库,比如 regex 类,regex_match、regex_search、regex_replace等方法,以及 regex_iterator 这个迭代器类。用起来非常方便,功能也很强大。

  • 容器类库

常见的容器,如 vector 、 list 、 map 、 set 、queue 、 stack 、 deque 、 multimap 、 multiset 等,基本可以满足日常的开发需要。C++11 引入了定长数组 array ,具有 C 风格数据的特性,更有 C++ 的便利操作;还有 unordered_set 、 unordered_map 等新的非排序容器,可以适应不需要排序的场景。

  • 泛型编程

C++ 里的泛型算法库,用起来非常方便,比如 find 、 find_if 、 count 、 count_if 、search 、search_n 、 copy 、 copy_n 、 copy_if 、 sort 、 partial_sort 、 binary_search 、 stable_sort 等等,功能非常强大。这些算法多数基于容器和迭代器,忽略具体数据类型,使用起来稍稍有些难度,不过掌握了容器、模板、迭代器等内容后,就可以很快应用起来。

  • 多线程和原子操作

这些都是 C++11 引入的类库,从此以后,C++语言本身有了并发编程的能力,非常酷。一个 thread 类,三五行代码,就可以启动一个线程,简单的使用 mutex 和 lock_guard ,就可以完成线程间的资源同步与保护,棒极了。

  • 系统调用

C++ 语言本身只能完成独立于系统的工作,实际的产品往往是与系统紧密相关的,因此必须熟悉系统调用。常见的系统调用,有 socket ,窗口管理系统(GUI)、文件操作等等。推荐我认为经典的几本书,可以帮助我们系统学习。

Windows 下推荐两本书,《Windows 程序设计》和《Windows 核心编程》,应用开发的话,基本有这两本就够了。Unix/Linux下也推荐两本书,《Unix 高级环境编程》和《Unix 网络编程卷1,套接字》、《Unix网络编程卷2,进程间通信》。前面我们提到 socket ,其实是属于网络编程的一部分,《Unix 网络编程》讲到的东西,Windows 和 Unix/Linux 都能用。

  • 第三方库类库

开始学习一门语言时,造轮子可以让我们快速进步,然而一旦你入了门,开始做实际的产品开发时,在稳定性、可维护性和交付期的压力下,就需要合理的利用第三方类库。

围绕 C++ 语言的第三方类库非常多,简单列一下,仅供参考。

GUI:Qt、MFC、WTL、wxWidgets、DirectUI
网络:ACE,libevent,libuv,libev, ASIO
多媒体与游戏:Skia、Cairo,SDL,AV3D, OGRE 3D, Cocos2d-x,ffmpeg、OpenH264、VLC、CxImage、CImg
XML:Xerces-C++,CMarkup,libxml++,TinyXML
科学计算:MTL,POOMA, Blitz++ ,CGAL
学习和使用第三方类库,又分三个阶段(我的订阅号“程序视界”发布过一篇名为“两招让你成为牛X的T型人才”,里面有详细介绍和实例):

基础开发,主要是了解API、基于API完成应用
熟悉内核及原理,主要是了解框架的设计原理,阅读源码,洞悉内在机理
优化框架,主要是针对框架的已有功能的不足进行完善、优化,或者使用框架提供的机制扩展框架功能,或者对框架进行定制,让它适合特定情境
有些类库功能非常丰富,比如 Qt 、 MFC 、 Cocos2d-x 等,单单一个类库就可以让人钻研几个月到几年,实际使用时,应当根据实际工作需要,先解决眼前的开发任务,然后设定目标、合理利用时间,沿着上面三个阶段来深入学习,培育自己的竞争力。

  • 总结

C++ 语言是一门复杂的语言,学习难度较高,学习时应当快速掌握基本知识,然后不断在项目中练习,以点带面扩展学习范围,闲暇时间有计划的在深度和广度两方面持续学习和积累。一旦形成了这样的良性循环,就可以熟练掌握 C++ 语言及相关的类库,不断精进。
部分转载http://blog.csdn.net/foruok/article/details/51836037#t2

0 0
原创粉丝点击