C++ Language 学习笔记¶
-
C++ Primer Plus 🎯
Stephen Prata著
内容提要¶
C++是在C语言基础开发的一种集面向对象编程、泛型编程和过程化编程于一一体的编程语言,是C语言的超集。本书是根据2003年的ISO/ANSIC++标准编写的,通过大量短小精悍的程序详细而全面地阐述了C++的基本概念和技术,并专辟一章介绍了C++11新增的功能。
全书分18章和 10个附录。分别介绍子C+程的运行方式、基本数据类型、复合数据类型、循环和关系表达式、分支语句和逻辑运算符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板库、输入/输出、C++11新增功能等内容。
本书针对C++初学者书中从C语言基础知识开始介绍,然后在此基础上详细阐述C+f新增的特性,因此不要求读者有C语言方面的背景知识。本书可作为高等院校教授C++课程的教材,也可供初学者自学 C++时使用。
目录¶
- CH01 C++入门
- CH02 C++探幽
- CH03 处理数据
- CH04 复合类型
- CH05 循环和关系表达式
- CH06 分支语句和逻辑运算符
- CH07 函数——C++的编程模块
- CH08 函数探幽
- CH09 内存模型和名称空间
- CH10 对象和类
- CH11 使用类
- CH12 类和动态内存分配
- CH13 类继承
- CH14 C++中的代码重用
- CH15 友元、异常和其他
- CH16 string类和标准模板库
- CH17 输入、输出和文件
- CH18 访问新C++标准
组织结构¶
本书分为18个章节和10个附录。通过大量简短而简洁的程序,详细介绍了C++的基本概念和技术,并专门为C++11新增的功能提供了一个章节。
-
第1章: C++入门 - 第1章讲述了Bjarne Stroustrup如何通过在C语言中添加面向对象编程支持来创建C++编程语言。您将了解**过程式语言**(如C)和**面向对象语言**(如C++)之间的区别。还介绍了制定C++标准的ANSI/ISO联合工作。该章讨论了创建C++程序的机制,并概述了几个当前C++编译器的方法。最后,介绍了本书中使用的约定。
-
第2章: 起步学习C++ - 第2章引导您通过创建简单的C++程序的过程。您将了解main()函数的作用以及C++程序中使用的某些语句类型。使用预定义的cout和cin对象进行程序输出和输入,并学习创建和使用变量。最后,介绍了函数,即C++的编程模块。
-
第3章: 数据处理 - C++提供了用于存储两种数据类型的内置类型:整数(没有小数部分的数字)**和**浮点数(具有小数部分的数字)。为了满足程序员的多样化需求,C++在每个类别中提供了几种类型。第3章讨论了这些类型,包括创建不同类型的变量和写入各种类型的常量。还将了解C++如何处理从一种类型到另一种类型的隐式和显式转换。
-
第4章: 复合类型 - C++允许您从基本内置类型构建更复杂的类型。最高级别的形式是**类**,将在第9至13章中讨论。第4章讨论其他形式,包括**数组**(保存单一类型的多个值)、结构(保存不同类型的多个值)和**指针**(标识内存中的位置)。还将学习如何通过使用C风格的字符数组和C++字符串类创建和存储文本字符串,并了解C++如何通过使用**new**和**delete**运算符显式管理内存分配,包括用于显式管理内存的new和delete运算符。
-
第5章: 循环和关系表达式 - 程序经常需要执行重复的操作,C++提供了三种循环结构:for循环、while循环**和**do while循环。这些循环必须知道何时终止,而C++的关系运算符使您能够创建测试以指导这些循环的测试。在第5章中,您将学习如何创建按字符逐个读取和处理输入的循环。最后,您将学习如何创建二维数组,并使用嵌套循环处理它们。
-
第6章: 分支语句和逻辑运算符 - 程序可以智能地行为,如果能够根据情况调整其行为。在第6章中,您将学习如何通过使用**if**、if else**和**switch**语句以及条件运算符来控制程序流程。还将学习如何使用逻辑运算符来帮助表达决策测试。此外,您将了解用于评估字符关系的**cctype函数库,例如测试字符是否是数字或非打印字符。最后,初步了解文件I/O。
-
第7章: 函数 - C++的编程模块 - 函数是C++编程的基本构建块。第7章着重介绍了C++函数与C函数共享的特性。具体而言,您将回顾函数定义的一般格式,并检查**函数原型**如何提高程序的可靠性。此外,您将调查如何编写处理数组、字符字符串和结构的函数。接下来,您将了解**递归**的概念,即一个函数调用自身,并看看如何使用它来实现分而治之的策略。最后,您将了解函数指针,使您能够使用函数参数告诉一个函数使用第二个函数。
-
第8章: 函数的冒险 - 第8章探讨了C++为函数添加的新特性。将学习**内联函数**,它可以通过增加程序大小来加速程序执行。将使用**引用变量**,为函数提供传递信息的另一种方式。默认参数允许函数自动为省略函数调用中的参数提供值。**函数重载**允许创建具有相同名称但采用不同参数列表的函数。所有这些特性在类设计中经常使用。此外,您还将了解函数模板,它允许您指定一系列相关函数的设计。
-
第9章: 内存模型和命名空间 —— 第9章讨论如何组合多文件程序。它审查了在分配内存方面的选择,查看了不同的内存管理方法以及作用域、链接和命名空间等,这些决定了程序的哪些部分了解变量。
-
第10章: 对象和类 —— 一个 类 是用户定义的类型,而一个对象(如变量)是该类的 实例。第10章向您介绍面向对象编程和类设计。类**声明描述了存储在类**对象中的信息**以及**允许类对象进行的操作(类方法)。对象的某些部分对外部**世界可见(公共部分),而某些部分是**隐藏的(私有部分)。在创建和销毁对象时,特殊的类方法(构造函数**和**析构函数)发挥作用。在本章中,您将了解所有这些类的详细信息,并看到如何使用类来实现抽象数据类型,例如栈。
-
第11章: 使用类-I — 在第11章中,您将进一步了解类。首先,您将学习**运算符重载**,它允许您定义运算符(例如+)如何与类对象一起工作。您将了解**友元函数**,它可以访问对外部世界不可见的类数据。您将看到某些构造函数和重载的运算符成员函数如何用于管理到和从类类型的转换。
-
第12章: 类和动态内存分配 —— 通常,有一个类成员指向动态分配的内存是有用的。如果您在类**构造函数**中使用new来分配动态内存,那么您需要履行提供适当的**析构函数**,定义显式的复制构造函数,以及定义显式的赋值运算符的责任。第12章向您展示了如何执行这些操作,并讨论了如果未提供显式定义,则生成的成员函数的行为。通过使用对象指针并研究队列模拟问题,您还将扩展对类的使用经验。
-
第13章: 类继承 —— 面向对象编程最强大的功能之一是**继承**,通过它**派生类**继承**基类**的特征,使您能够重用基类代码。第13章讨论了公共继承,它模拟
is-a
关系,即派生对象是基对象的一种特殊情况。例如,物理学家是科学家的一种特殊情况。一些继承关系是**多态**的,这意味着您可以编写使用一系列相关类的代码,其中相同的方法名称可能调用取决于对象类型的行为。实现这种行为需要使用一种称为**虚函数**的新类型的成员函数。有时使用抽象基类是继承关系的最佳方法。本章讨论了这些问题,并指出了何时使用公共继承是合适的以及何时不合适。 -
第14章: 在C++中重用代码 —— 公共继承只是重用代码的一种方式。第14章查看了其他几种方式。包含是当一个类包含另一个类的对象成员时的情况。它可以用于模拟has-a关系,其中一个类具有另一个类的组件。例如,汽车有一个发动机。您还可以使用私有和受保护的继承来模拟这种关系。本章向您展示了如何使用这些方法,并指出了不同方法之间的差异。此外,您将学习类模板,它允许您根据某种未指定的通用类型定义类,然后使用模板根据特定类型创建特定的类。例如,堆栈模板使您能够创建整数堆栈或字符串堆栈。最后,您将学习多重公共继承,其中一个类可以从多个类派生。
-
第15章: 友元、异常和更多 —— 第15章扩展了有关友元的讨论,包括友元类和友元成员函数。然后,它介绍了C++中的几个新发展,从异常开始,为处理异常的不同程序事件(例如不合适的函数参数值和内存不足)提供了一种机制。接下来,您将了解RTTI,一种用于识别对象类型的机制。最后,您将了解无限制类型转换的更安全的替代方法。
-
第16章: string类和标准模板库 —— 第16章讨论了语言中最近添加的一些有用的类库。**string类是传统C样式字符串的便捷且强大的替代品。**auto_ptr类有助于管理动态分配的内存。STL提供了几个通用容器,包括数组、队列、列表、集合和映射的模板表示。它还提供了一个与STL容器和普通数组一起使用的高效的通用算法库。valarray模板类提供了对数字数组的支持。
-
第17章: 输入、输出和文件 —— 第17章回顾了C++ I/O并讨论了如何格式化输出。您将学习如何使用类方法确定输入或输出流的状态,例如在输入上是否存在类型不匹配或是否检测到文件结束。C++使用继承来派生用于管理文件输入和输出的类。您将学习如何打开文件进行输入和输出,如何将数据附加到文件,如何使用二进制文件,以及如何对文件进行随机访问。最后,您将学习如何将标准I/O方法应用于从和写入字符串。
-
第18章: 访问新的C++标准 —— 第18章首先回顾了早期章节介绍的C++11功能,包括新类型、统一初始化语法、自动类型推导、新的智能指针和作
-
附录 A: 进制 —— 附录 A 讨论了八进制、十六进制和二进制数字。
-
附录 B: C++ 保留关键词 —— 附录 B 列出了C++的关键词。
-
附录 C: ASCII 字符集 —— 附录 C 列出了ASCII字符集,以及十进制、八进制、十六进制和二进制表示。
-
附录 D: 运算符优先级 —— 附录 D 按降序列出了C++运算符的优先级顺序。
-
附录 E: 其他运算符 —— 附录 E 总结了C++运算符,如位运算符等,这些没有在正文中涵盖。
-
附录 F: 字符串模板类 —— 附录 F 总结了字符串类的方法和函数。
-
附录 G: 标准模板库方法和函数 —— 附录 G 总结了STL容器的方法和通用STL算法函数。
-
附录 H: 选读和网络资源 —— 附录 H 列出了一些可以加深您对C++理解的书籍。
-
附录 I: 转换为ISO标准C++ —— 附录 I 提供了从C和旧版C++实现迁移到ANSI/ISO C++的指南。
-
附录 J: 答案与章节复习 —— 附录 J 包含了每章末尾提出的复习问题的答案。