C++学习--应用篇(Windows/Linux)(书籍推荐及分享)

我将以平台划分,分别介绍Windows和Linux下个人认为的好书(与基础篇一样,大部分网络上都有电子版);

对于C++基础类的图书,这里不再重复,有兴趣的朋友请移步《C++学习--基础篇》。

Windows:

在Windows平台下主要说的是VC编程(使用MFC),以下将对VC开发的相关图书介绍;对于ATL等,涉及不多,不做评论;

Windows程序设计

这是一本绝版的图书,算是Windows平台下编程指南图书的鼻祖。网络传言甚好,由于年代久远,一般不好下载了,在这里给出下载地址。方便朋友;

本书每章的例子都是使用的Windows下的原始API开发的,一个基本窗口的显示也需要自己动手编写接受消息的循环以及消息翻译的逻辑;即使是使用MFC开发的朋友,这本书的作用也很明显,它能让你自行解剖MFC框架程序,明明白白的看透MFC是如何为我们做底层封装,如何实现消息链传递(结合《深入浅出MFC》,整个流程就相当透彻了);

Visual C++技术内幕

本书名称上看似高深,但并不非内幕系图书;可以做为项目开发的一本工具书,实践应用。全但不深,是VC方面的基础书籍;内容中对于VS操作的插图讲解很多,浅显易懂;

深入浅出 MFC 第二版

本书是MFC的经典读本,相信搞VC开发的很多人都看过,接着又忘了。是否该再来一遍,自测一下: 1.MFC中的生死循环(就是整个从程序开始运行到结束,主要经过的函数流程) 2.MFC中使用消息映射机制来分发消息,考虑与使用虚函数相比 有何优缺点? 3.MFC中用到的模式有哪些?

虽然微软的VC.net已经推出有好些年了,但纯VC的开发程序仍然在国内流行。比如建筑、工程测量方面的软件大部分还是VC开发(工具甚至还有VC6.0)。这本书是97年出版的,直到今天,对于需要掌握MFC的朋友来说,它仍然是不二之选;

Windows核心编程(第5版)》

对于一般GUI程序的开发,看看VC技术内幕就可以动手;但涉及到进程间通信,涉及到多线程、互斥、信号量,不看这本书,就太可惜了。讲解全面而深入,Windows系统的各种核心对象都涉及到了。强烈推荐;

两句话:

Windows平台下的经典;

Windows开发必备;

VC知识库

这是我不得不提的一个网站。VC知识库制作了一个源代码ISO光盘和在线杂志(提供chm包离线下载),分门别类的将各种程序、各种技术文章分类,制作到一个chm文件中,对VC的朋友来说,有很大的参考价值。在我开发Windows程序的几年中,我会经常查阅VC知识库的代码仓库和在线杂志(有源码);

比如,对于数据库访问,如果之前从来都没做过,都想有几篇手把手的文章,要是能再来个实例,那就最好。类似这样的需求,vc知识库的在线杂志可以完美满足;

Linux/Unix篇

Linux服务器端的魅力对于同时把玩过Windows和linux服务器的人来说,体会会非常深刻;相比与Windows,其管理操作方便很多,也强大很多。Windows平台下,DOS、批处理,功能还很弱,多数时刻还是得通过远程桌面来管理各种程序;

Linux则不一样,所有的程序都是在黑屏下,操作顺滑流畅,散发五指快弹魅力;

鸟哥的Linux私房菜 基础学习篇(第二版)》

对于从未接触过Linux提供的同学来说,本书算是一个福音,以轻松诙谐的语言说清了常用的系统命令用法及语境; 对Linux零基础的同学,推荐阅读;

我看过的比较全面的讲解Linux基础的书是《LPI LINUX认证权威指南》,写的比较硬,但知识点扎实,作为需要全面梳理一遍linux基础知识的同学,还是可以好好看看,当然了,比较枯燥,如果不是有考试的动力,一般也看不动。

Linux程序设计

写的中规中矩,linux下编程入门指导书,讲解全面,但不深入;

这本书能告诉你在linux上如何编译一个程序,如何使用gdb,但是,它不会告诉你信号量如何使用;

看完必然不解渴,当然得来一剂《unix环境高级编程》。

UNIX编程艺术

个人认为最精彩的是前3章,将Unix的历史和渊源完美展现在读者眼前; 本书从头到尾就是在宣传Unix的文化,阐明了我们常用工具的历史及设计思想; 当你在vi和emacs的选择上有困惑时,在python和perl间的选择困惑时,可以参考本书,你会得到一个中肯的建议。

UNIX环境高级编程

对于巨著,我一向神往,国外的作者一般都能把理论和概念讲得透彻而生动; 对于本书,我的观点是:想说爱你不容易;确为经典好书,但那密密麻麻的排版格式,那一行行艰深的文字,让我一次次裹足不前。 每当有技术难点,都能在Stevens系列中找到答案。是该静下心来,好好读完它,然后常驻案边;

UNIX网络编程 卷2

该书的另一名称:Unix系统IPC编程圣经 在工作中,需要用到进程间通信,以及想掌握IPC知识的,本书不可或缺;对于共享内存的讲解方面,也非常透彻;

C++学习–基础篇(书籍推荐及分享)

算起来,用C++已经有七八年时间,也有点可以分享的东西;

以下推荐的书籍木书架上大多有电子版。对于技术类书籍,电子版并不会带来一个好的阅读体验。如果喜欢,最好找纸版(图书馆是个好去处);电子版更适合作为一个参考书籍常备电脑。

我将分为基础篇、Windows篇、和Linux/Unix篇 三个部分来介绍这些经典书籍:

C++入门:

C++ Primer

我的C++入门读物是《C++大学教程》,这本书800多页,由于学习时间长,一个学期学这么一本书,时间上的富裕,让我有充分的时间来吸收。书中80%的代码我都敲到PC上运行过;后来再看《C++ primer》的时候,也就一个星期的功夫翻完了。都是入门读物,介绍的也都全面。刚接触C++的朋友,至少应该将这方面的书好好过一遍。

语言技巧,性能优化:

Effective C++》

C++必知必会

More Effective C++

有了语言基础之后,接着就是细节上的深入,进一步领会C++的精髓。《Effective C++》可以看作是一本C++ 疑难解惑手册; 对于C++语言层次深入一点的东西,容易出错的知识点,在这边书上可找到满意解答;适合多次品味。

《C++必知必会》《More Effective C++ 》则作为对Effective C++ 没有讲完的补充,可看作前者看完后意犹未尽时使用;

顺便说下,这三本书都不厚,小册子,每本也就几天的功夫就可以搞定;

底层硬货:

C专家编程

C和指针

C++源于C,对于指针、对于各种地址的偏移计算,对于大端小端的深刻剖析,还得靠一些硬通货来解析;这两本书虽说不厚,但读起来确实费劲,信息量很足,很多都是在平时C++使用中没有意识到的知识点,却又都是重要的点。让人有知其所以然的快感;

涉及到底层的东西,都是用来验证编程功底是否扎实。要想彻底掌握C++底层的东西,还是得看看专家编程,很好的两本书,指针等讲的很透彻。

STL:

C++标准程序库

泛型编程与STL

STL源码剖析

《C++标准程序库》是属于百科全书类型,讲解基础,但语言平淡(是以参考手册的角度来写的),没有勇气将其全部翻完,捡感兴趣的和自己很缺乏的部分看了看(里面关于智能指针方面的论述,还不错);

《泛型编程与STL》里面对萃取机制及各泛型的概念论述非常透彻,前6章为主要篇章,不可跳过。后面的可在实践中编码练习或查找。 后面章节可在看完之后做为手册使用,对STL中的常用算法和容器进行了归类讲解,并给出了相当数量的示例。

《STL源码剖析》每一个推荐深入STL的文章应该都少不了这本书。下面几个问题可以考查一下是否需要看看: 1.STL中DQueue的实现机制(数据结构式如何组织的,其迭代器的插入和删除过程中的实现) 2.是否熟悉红黑树,能否叙述其插入和删除过程,如何调整。 3.萃取器的几种实现。

Boost

超越c标准库——boost程序库导论

当标准库无法再满足你的时候,就轮到Boost出场了。编程,讲究两个效率,一是开发效率,二是运行效率。与其它编译型语言相比(java、C#等),C++属于后者,运行效率不错,但开发效率着实低。除了C++更底层的原因外,另一方面的原因就是标准库提供的功能不足。没有太多的工具,想实现什么都得自己来一遍,重复的造轮子的工作在程序员中不断上演;

Boost库是对C++标准库的扩展,让我们在开发的过程中有更多的工具可以选择。正则表达式、智能指针等工具都是非常有用的工具,而函数对象,Lambda则让我们在编写C++的代码中更为优雅;

这里提供的一本书是Boost的入门经典。它的目的就是让你对boost产生兴趣。等有了兴趣之后,就直接上boost的官网吧,需要什么尽管拿。

设计模式:

设计模式

设计模式精解

道法自然

《设计模式》是该领域的圣经,未全看完。虽说经典,但一页一页的翻完,还真要点耐性。不像老外写书的风格,这本书看的很累(这也是一本参考手册)。我认为在对大部分模式都有一定的了解后再来看这本书,会找到很多兴趣点。

《设计模式精解》我的设计模式之路是从这本书入门的,通过几个实例来解释模式的用法,以及为什么要用模式(这个可能更重要),不过全书也就讲了10来个模式,意犹未尽。对设计模式感兴趣、初学者推荐;

《道法自然》是国人写的很不错的一本书,用他们自己写的一个框架系统作为实例,贯穿全文,讲解各种模式的用法。看过后,体会到模式在大项目,特别是这种框架系统中的应用真是太到位了。同时,熟悉MFC的朋友会在本书中收获更多的东西,MFC也是一个框架系统,通过本书的讲解,可以体会到MFC的内部设计以及为何如此设计(书中就专门讲到MFC中的设计思想),同时,在讲单件模式的时候,还带出了MFC中theApp的作用(为什么要在MFC中安排一个theApp全局变量?这是我看到的唯一一本书解释了这个问题的);

算法篇

编程珠玑

讲解数据结构和算法技巧的压轴好书。

基础篇就谈这些,后续将讨论C++的应用,Windows篇和Linux/Unix篇;

C add的更多相关文章

  1. AutoMapper:Unmapped members were found. Review the types and members below. Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type

    异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 应用场景:ViewModel==>Mode映射的时候出错 AutoMappe ...

  2. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  3. ASP.NET Core: You must add a reference to assembly mscorlib, version=4.0.0.0

    ASP.NET Core 引用外部程序包的时候,有时会出现下面的错误: The type 'Object' is defined in an assembly that is not referenc ...

  4. [转]NopCommerce How to add a menu item into the administration area from a plugin

    本文转自:http://docs.nopcommerce.com/display/nc/How+to+code+my+own+shipping+rate+computation+method Go t ...

  5. [deviceone开发]-动态添加组件add方法的示例

    一.简介 这个示例详细介绍ALayout的add方法的使用(原理也适用于Linearlayout),以及add上去的新ui和已有的ui如何数据交换,初学者推荐.二.效果图 三.相关下载 https:/ ...

  6. [LeetCode] Add Two Numbers II 两个数字相加之二

    You are given two linked lists representing two non-negative numbers. The most significant digit com ...

  7. [LeetCode] Add Strings 字符串相加

    Given two non-negative numbers num1 and num2 represented as string, return the sum of num1 and num2. ...

  8. [LeetCode] Expression Add Operators 表达式增加操作符

    Given a string that contains only digits 0-9 and a target value, return all possibilities to add ope ...

  9. [LeetCode] Add Digits 加数字

    Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. ...

  10. [LeetCode] Different Ways to Add Parentheses 添加括号的不同方式

    Given a string of numbers and operators, return all possible results from computing all the differen ...

随机推荐

  1. crawler_JVM_DNS_在爬虫中的应用

    DNS解析:即由域名 经过dns解析,跳转到真正服务器的地址,这个重复解析的耗时占请求很大比例. 在设计爬虫时比较细粒度的控制下,需要考虑dns解析. jdk从1.5往后对dns缓存有默认设置, 详见 ...

  2. 采用RedisLive监控Redis服务

    1.基础环境安装https://pypi.python.org/packages/source/b/backports.ssl_match_hostname/backports.ssl_match_h ...

  3. C#实现对mongoDB的简单增删查改

    首先添加所需要驱动包(可通过nuget获得) using MongoDB.Bson;using MongoDB.Driver;using MongoDB.Driver.Builders; 一.设置配置 ...

  4. 私人定制javascript中函数小知识点

    函数的定义 首先在javascript中,函数就是对象,程序可以随意操控它们.比如,可以给它们设置属性,甚至调用它们的方法.函数使用function关键字来定义.它既可以用在函数定义表达式,也可以用在 ...

  5. 队列--Redis+Log4Net

    队列--Redis+Log4Net Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景.Redi ...

  6. git合并远端分支到本地分支的两种方式

    作者:zhanhailiang 日期:2014-11-21 在使用版本号工具提交改动之前,都须要通过update先将本地代码更新到最新版本号.SVN通过svn update就能够实现,那么git怎样实 ...

  7. linux下mysql的远程连接

    在服务器上安装mysql后,想使用本地的mysql客户端连接数据库时,提示不允许连接,比较郁闷,找到了这篇文章解决了我的问题: 内容如下: 本地计算机ip:192.168.1.100远程计算机ip:1 ...

  8. Excel基于POI导入导出的Annotation化之路(一)

    Excel在web项目里的使用变得越来越广泛,特别是和线下耦合度较高的业务,Excel导入导出变得非常频繁,尽管很多人写了诸多的工具方法,但是终究没有解决一个问题:有效的控制字段英文名称和实际表头名称 ...

  9. sdut 3-4 长方形的周长和面积计算

    3-4 长方形的周长和面积计算 Time Limit: 1000MS Memory limit: 65536K 标题叙述性说明 通过本题的练习能够掌握拷贝构造函数的定义和用法: 设计一个长方形类Rec ...

  10. MyEclipse 设置全部jsp的编码为UFT-8 的方法