目录:
第1章和第2章形成了一个独立完整的CPP介绍和概述。
第1章向我们介绍了语言的基本元素。(Preprocessor),以及对输入和输出的支持。它给出了多个简单但却完整的CPP程序。第2章介绍了CPP是如何通过类机制,为基于对象和面向对象的程序设计提供支持的,同时通过数组抽象的演化过程来说明这些设计思想的。(进度较快,可跳)
第3章介绍了CPP语言预定义的内置和复合数据类型,以及CPP标准库提供的string、complex、vector类数据类型。这些类型构成了所有程序的基石。第4章详细讨论了C++语言支持的表达式,比如自述、关系、赋值表达式。语句是CPP程序中最小的独立单元,它是第5章的主题。CPP标准库提供的容器类型是第6章的焦点。我们不是简单地列出所有可用的操作,而是通过一个文本系统的实现,来说明这些窗口类型的设计和用法。
第7章到第12章(第3篇)集中在CPP为基于过程化的程序设计所提供的支持上。第7章介绍CPP函数机制。函数封装了一组操作,它们通常形成一项单一的任务,如print()。关于程序域和变量生命期的概念、以及名字空间设施的讨论是第8章的主题。第9章扩展了第7章中引入的关于函数的讨论,介绍了函数的重载。第10章介绍和说明函数模板的用法。函数模板为自动生成多个函数实例(可能是无限多个)提供了一种规范描述(prescription),这些函数实例的类型不同,但实现的方式保持不变。#CPP支持异常处理设施。异常表示的是一个没有预料到的程序行为,比如所有可用的程序内存耗尽。出现情况的程序部分会抛出一个异常——即程序的其他部分都可以访问到。程序中的某个函数必须捕获这个异常做一些必要的动作。对于异常处理的讨论跨过了两章。第11章用一个简单的例子了异常处理的基本语法和用法,该例子捕获和抛出一个类类型(class type)的异常。因为在我们的程序中,实际被处理的异常通常是一个面向对象类层次结构的类对象,所以,关于怎样抛出和处理异常的讨论一直继续到第19章,也就是在面向对象程序设计之后。
第12章介绍标准库提供的泛型算法集合
第13章到第16章(第四篇)的焦点集中在基于对象的程序设计上——即创建独立的抽象数据类型的那些类设施的定义和用法。通过创建新的类型来描述问题域,CPP允许程序员在写应用程序时可以不用关心各种乏味的薄记工作。应用程序的基本类型可以只被实现一次,而多次被重用,这使程序员能够将注意力集中在问题本身,而不是实现细节上。这些封装数据的设施可以极大的简化应用程序的后续维护和改进工作。
第13章集中在一般的类机制上:怎样定义一个类,信息隐藏的概念(即把类的公有接口同私有实现分离),以及怎样定义并封装一个类的对象实例。这一章还有关于类域、嵌套类、类作为名字空间成员的讨论。
第14章详细讨论CPP为类对象的初始化、析构以及赋值而提供的特殊支持。为了支持这些特殊的行为,需要使用一些特殊的成员函数,分别是构造函数、析构函数和拷贝的主题(即指一个类对象被初始化为或者赋值为该类的另一个对象),以及为了有效地支持按成员初始化和拷贝而提出的命名返回值(name return value)扩展。
第15章将介绍类特有的操作符重载,首先给出一般的概念和设计考虑,然后介绍一些特殊的操作符,如赋值、下标、调用以及类特有的new和delete操作符。这一章还介绍了类的友元(它对一个类具有特殊的访问特权)及其必要性。然后讨论了函数重载银板的规则,并带有代码示例说明。
类模板是第16章的主题。类模板是用来创建规范描述,其中的类包含一个或多个参数化的类型或值。
面向对象的程序设计和CPP的支持机制是17-20章(第五篇)的主题。第17章介绍了CPP对于面向对象程序设计主要要素的支持:继承和动态绑定。在面向对象的程序设计中,用父/子关系(也称为类型/子类型关系)来定义“有共同行为的各个类”。类不用重新实现共享特性,它可以继承父类的数据和操作。子类或者子类型只针对它与父类不同的地方进行设计。
继承的第二个方面,称为多态性,是指父类型具有“引用由它派生的任何子类型”的能力。动态绑定是指“在运行时刻根据多态对象的实际类型来确定应该执行哪个操作”的解析能力,在CPP中,这是通过虚拟函数机制来处理的。
第17章介绍了面向对象程序设计的基本特性。
第18章介绍更为复杂的继承层次结构,多继承和虚拟继承机制使得这样的层次结构成为可能。
第19章介绍RTTI(运行时刻类型识别)设施。
第20章详细说明了如何使用CPP的iostream输入/输出库。
最后以一个附录作为结束,给出了每个泛型算法的简短讨论和程序例子,并以字母排序。