从入门到进阶的系列书籍推荐 C (从入门到进阶,行星摄影详细教程)
本文目录导航:
- C++从入门到进阶的系列书籍推荐
- 1. C++入门书籍
- 2. VC++/MFC书籍
- 3. C++进阶书籍
- 4. Windows编程书籍
- 5. Linux书籍
- 6. 汇编与软件调试书籍
- 7. 网络及TCP/IP协议
- 8. 设计模式、数据结构与算法
- 设计模式都有哪些?
- 简单说说常用的几个设计模式.
C++从入门到进阶的系列书籍推荐
要多读书,读好书!学习任何技能,阅读经典书籍都是不可或缺的一步。
C++从入门到进阶,需要扎实的基础和深入的理解。
接下来,我们将推荐一系列从入门到进阶的C++经典书籍,帮助您全面提升编程技能。

1. C++入门书籍
了解C++之前,首先需要掌握C语言的基础。
以下两本书是学习C语言的经典教材。
本书被广泛采用为学习C语言的教材,通俗易懂,是初学者的必备读物。
我在解决编译问题时,翻阅了该书的相关章节,精准的表述让我恍然大悟,很多学生时代未理解的内容,有了工作经验后,豁然开朗。
这是一本学习C++语言的经典入门教材,详细讲解了C++语言的基础语法和概念。
最新版全面采用C++11标准,体现了C++语言的重大进展。
丰富的教学辅助内容、醒目的知识点提示和精心组织的编程示范,使得本书在C++领域内权威地位稳固。
2. VC++/MFC书籍
在掌握C++基础后,可以从简单的Windows编程开始,逐步熟悉Visual Studio开发工具的使用。
MFC虽然在大型商用项目中已较少使用,但它作为经典UI框架,对编写小型工具软件依然有重要作用。
这是一本学习Windows编程的入门经典教材,由浅入深地讲述Windows程序的内部运行机制、MFC框架、文本、菜单、对话框、文件操作、网络编程等多个主题。
2.2 深入浅出MFC(侯捷)本书深入学习MFC编程,分为四大篇,从学习MFC程序设计的基础到Visual C++开发环境,再到MFC核心程序,最后通过微软附带的Scribble程序实例,深入讲解Runtime Type Information、Dynamic Creation、Persistence、message Mapping、Command Routing等核心技术。
3. C++进阶书籍
在具备一定开发经验后,需要深入理解C++特性,提高编写C++代码的效率和稳定性。
3.1 Effective C++:改善程序与设计的55个具体做法(第3版)(Scott Meyers著)
Scott Meyers的成名之作,是提升C++功力的绝佳契机。
阅读这本书后,您的C++技能将显著提升。
本书是Scott Meyers Effective系列的进阶版本,深入解析C++编译器如何解释代码,助您编写出更健壮的软件。
3.3 STL源码剖析(侯捷)深入了解STL的内部实现,本书详细讲解了vector、list、heap、deque、Red Black tree、hash table等数据结构的实现,让您掌握各种算法的实现。
4. Windows编程书籍
从事Windows应用程序开发的人,以下两本书是经典的选择,深入了解Windows系统特性。
4.1 Win32多线程程序设计(Jim Beveridge / Robert Wiener)全书详细讲解Windows系统中的多线程编程技术,包括线程的启动和结束、核心对象、同步机制及其用途。
4.2 Windows核心编程(Jeffrey Richter / christophe Nasarre)本书是深入理解Windows特性的必备参考书,全面讲解Windows核心编程,引领数万程序员步入Windows开发领域。
5. Linux书籍
Linux系统广泛应用于各种服务器,作为C++开发人员,学习Linux知识与技能至关重要。
5.1 鸟哥的Unux私房菜本书全面介绍了Linux系统的基本原理,适合初学者入门。
5.2 Linux内核源代码情景分析本书采用情景会话教学法,全面剖析Linux内核源代码,深入理解Linux系统特性。
6. 汇编与软件调试书籍
掌握一定的汇编语言基础和软件调试技能,对于解决C++程序问题至关重要。
6.1 汇编语言(王爽)本书系统讲解汇编语言,为初学者提供循序渐进的学习路径。
6.2 IDA Pro权威指南(Chris Eagle)IDA Pro是应用广泛的静态反汇编工具,本书深入讲解其使用方法。
6.3 软件调试(张银奎)本书全面展示软件调试技术,是深入理解软件和自由驾驭软件的宝贵资料。
6.4 格蠹汇编:软件调试案例集锦本书通过具体案例解析软件调试,适合程序员和信息安全研究者阅读。
7. 网络及TCP/IP协议
学习网络知识,掌握排查网络问题的方法是C++程序开发人员的必备技能。
7.1 计算机网络(谢希仁)本书系统介绍了计算机网络的基本原理和各种网络技术。
7.2 TCP/IP详解(卷1、卷2、卷3)本书从协议、实现和TCP事务协议等多个角度深入讲解TCP/IP协议。
8. 设计模式、数据结构与算法
掌握设计模式、数据结构和算法是提高编程能力的关键。
8.1 boost程序库完全开发指南(罗剑锋)本书详细介绍boost库,帮助读者迅速掌握其用法和实际开发应用。
8.2 大话设计模式(程杰)本书以问答形式讲解设计模式,引导初学者理解设计背后的智慧。
8.3 设计模式:可复用面向对象软件的基础(Erich Gamma / Richard Helm / Ralph Johnson)本书精选23个设计模式,总结面向对象设计中最有价值的经验。
8.4 数据结构与算法分析(Mark Allen Weiss)本书被世界众多大学用作教材,深入讨论算法和数据结构。
8.5 算法导论(Thomas H. Cormen)本书涵盖各类算法,旨在使不同层次的读者都能理解和接受。
通过阅读这些经典书籍,您将从C++的入门到进阶,全面提升编程技能,成为更加优秀的C++开发者。
设计模式都有哪些?
总体来说设计模式分为三大类:
一、创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
二、结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
三、行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
1、工厂方法模式:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。
Factory Method 使一个类的实例化延迟到其子类。
工厂模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,这就用到工厂方法模式。
创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
2、抽象工厂模式:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂需要创建一些列产品,着重点在于创建哪些产品上,也就是说,如果你开发,你的主要任务是划分不同差异的产品线,并且尽量保持每条产品线接口一致,从而可以从同一个抽象工厂继承。
3、单例模式:
单例对象(Singleton)是一种常用的设计模式。
在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。
这样的模式有几个好处:
(1)某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
(2)省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
(3)有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。
(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
4、建造者模式:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
5、原型模式:
原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。
本小结会通过对象的复制,进行讲解。
在Java中,复制对象是通过clone()实现的,先创建一个原型类。
6、适配器模式:
适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。
主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。
7、装饰器模式:
顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。
8、代理模式:
代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。
9、外观模式:
外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口。
10、桥接模式:
桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。
桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样。
JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。
11、组合模式:
组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便。
使用场景:将多个对象组合在一起进行操作,常用于表示树形结构中,例如二叉树,数等。
12、享元模式:
享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。
13、策略模式:
策略模式定义了一系列算法,并将每个算法封装起来,使其可以相互替换,且算法的变化不会影响到使用算法的客户。
需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数。
14、模板方法模式:
一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用。
15、观察者模式:
观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。
其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。
16、迭代子模式:
顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。
这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。
17、责任链模式:
责任链模式,有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。
但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整。
18、命令模式:
命令模式的目的就是达到命令的发出者和执行者之间解耦,实现请求和执行分开。
19、备忘录模式:
主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些,通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部状态,类C呢,就是一个用来存储备忘录的,且只能存储,不能修改等操作。
20、状态模式:
状态模式在日常开发中用的挺多的,尤其是做网站的时候,我们有时希望根据对象的某一属性,区别开他们的一些功能,比如说简单的权限控制等。
21、访问者模式:
访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。
访问者模式适用于数据结构相对稳定算法又易变化的系统。
因为访问者模式使得算法操作增加变得容易。
若系统数据结构对象易于变化,经常有新的数据对象增加进来,则不适合使用访问者模式。
访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者。
访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。
其缺点就是增加新的数据结构很困难。
22、中介者模式:
中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。
如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行,这有点像spring容器的作用。
23、解释器模式:
解释器模式一般主要应用在OOP开发中的编译器的开发中,所以适用面比较窄。
扩展资料:
介绍三本关于设计模式的书:
1、《设计模式:可复用面向对象软件的基础》
作者:[美] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
出版社: 机械工业出版社
2、《软件秘笈:设计模式那点事》
作者:郑阿奇
出版社:电子工业出版社
3、《设计模式:基于C#的工程化实现及扩展》
作者:王翔
出版社:电子工业出版社
简单说说常用的几个设计模式.
一些基本的设计模式Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
(使用得非常频繁。
)Adapter:将一个类的接口转换成客户希望的另外一个接口。
A d a p t e r模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
Bridge:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
Builder:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
Chain of Responsibility:为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。
将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
Command:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
Composite:将对象组合成树形结构以表示“部分-整体”的层次结构。
它使得客户对单个对象和复合对象的使用具有一致性。
Decorator:动态地给一个对象添加一些额外的职责。
就扩展功能而言, 它比生成子类方式更为灵活。
Facade:为子系统中的一组接口提供一个一致的界面, F a c a d e模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
Factory Method:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。
Factory Method使一个类的实例化延迟到其子类。
Flyweight:运用共享技术有效地支持大量细粒度的对象。
Interpreter:给定一个语言, 定义它的文法的一种表示,并定义一个解释器, 该解释器使用该表示来解释语言中的句子。
Iterator:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
Mediator:用一个中介对象来封装一系列的对象交互。
中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
Memento:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
这样以后就可将该对象恢复到保存的状态。
Observer:定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
Prototype:用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
Proxy:为其他对象提供一个代理以控制对这个对象的访问。
Singleton:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
State:允许一个对象在其内部状态改变时改变它的行为。
对象看起来似乎修改了它所属的类。
Strategy:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
本模式使得算法的变化可独立于使用它的客户。
Template Method:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
Visitor:表示一个作用于某对象结构中的各元素的操作。
它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
最常用:Factory Method, Strategy, Singleton, Iterator偶尔用:Abstract Factory, Builder, Adapter, Bridge, Composite, Interpreter, Command, Mediator, Observer, State几乎不用: Prototype, Decorator, Flyweight, Facade, Proxy, Template Method, Chain of Responsibility, Memento, Visitor