9.3k words 8 mins.

# Chapter 19 Specialized Tools and Techniques # Controlling Memory Allocation # 控制内存分配 # 重载 new 和 delete new 表达式的工作机理: string *sp = new string("a value"); // 分配并初始化一个 string 对象string *arr = new string[10]; // 分配 10 个默认初始化的 string 对象 上述代码实际执行了三步操作: new 表达式调用一个名为 operator new (或...
9.1k words 8 mins.

# Chapter 18 Tools for Large Programs 大规模应用程序的特殊要求包括: 在独立开发的子系统之间协同处理错误的能力。 使用各种库进行协同开发的能力。 对比较复杂的应用概念建模的能力。 # Exception Handling # 异常处理 异常处理(exception handling)机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并作出相应的处理。 # 抛出异常 在 C++...
28k words 26 mins.

# Chapter 17 Specialized Library Facilities # The tuple Type # tuple 类型 tuple 是类似 pair 的模板,每个成员类型都可以不同,但 tuple 可以有任意数量的成员。 但每个确定的 tuple 类型的成员数目是固定的。 我们可以将 tuple 看做一个 “快速而随意” 的数据结构。 tuple 支持的操作: 操作 解释 tuple<T1, T2, ..., Tn> t; t 是一个 tuple ,成员数为 n ,第 i 个成员的类型是 Ti...
32k words 29 mins.

# Chapter 16 Templates and Generic Programming 面向对象编程和泛型编程都能处理在编写程序时不知道类型的情况。 OOP 能处理类型在程序运行之前都未知的情况; 泛型编程中,在编译时就可以获知类型。 # Defining a Template # 定义模板 模板:模板是泛型编程的基础。一个模板就是一个创建类或函数的蓝图或者说公式。 # 函数模板 template <typename T> int compare(const T &v1, const T...
25k words 23 mins.

# Chapter 15 Object-Oriented Programming # OOP: An Overview # OOP:概述 面向对象程序设计(object-oriented programming)的核心思想是数据抽象、继承和动态绑定。 继承(inheritance): 通过继承联系在一起的类构成一种层次关系。 通常在层次关系的根部有一个基类(base class)。 其他类直接或者简介从基类继承而来,这些继承得到的类成为派生类(derived...
40k words 36 mins.

# Chapter 14 Overloaded Operations and Conversions # Basic Concepts # 基本概念 重载运算符是具有特殊名字的函数:由关键字 operator 和其后要定义的运算符号共同组成。 当一个重载的运算符是成员函数时, this 绑定到左侧运算对象。动态运算符符函数的参数数量比运算对象的数量少一个。 只能重载大多数的运算符,而不能发明新的运算符号。 重载运算符的优先级和结合律跟对应的内置运算符保持一致。 调用方式: data1 + data2; operator+(data1, data2); 是否是成员函数: 赋值( =...
30k words 27 mins.

# Chapter 13 Copy Control 拷贝控制操作(copy control): 拷贝构造函数(copy constructor) 拷贝赋值运算符(copy-assignment operator) 移动构造函数(move constructor) 移动赋值函数(move-assignement operator) 析构函数(destructor) # Copy, Assign, and Destroy # 拷贝、赋值和销毁 # 拷贝构造函数 如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。 class...
21k words 19 mins.

# Chapter 12 Dynamic Memory 对象的生命周期: 全局对象在程序启动时分配,结束时销毁。 局部对象在进入程序块时创建,离开块时销毁。 局部 static 对象在第一次使用前分配,在程序结束时销毁。 动态分配对象:只能显式地被释放。 对象的内存位置: 静态内存用来保存局部 static 对象、类 static 对象、定义在任何函数之外的变量。 栈内存用来保存定义在函数内的非 static 对象。 堆内存,又称自由空间,用来存储动态分配的对象。 # Dynamic Memory and Smart Pointers #...
15k words 14 mins.

# Chapter 11 Associative Containers # Using an Associative Container 关联容器和顺序容器的不同:关联容器中的元素时按照关键字来保存和访问的。 关联容器支持通过关键字来高效地查找和读取元素,基本的关联容器类型是 map 和 set 。 关联容器类型: 容器类型 解释 按顺序存储 map 关键数组:保存 关键字-值 对 set 关键字即值,即只保存关键字的容器 multimap 支持同一个键多次出现的 map multiset 支持同一个键多次出现的...
24k words 22 mins.

# Chapter 10 Generic Algorithms # Overview # 泛型算法 因为它们实现共同的操作,所以称之为 “算法”;而 “泛型”、指的是它们可以操作在多种容器类型上。 泛型算法本身不执行容器操作,只是单独依赖迭代器和迭代器操作实现。 头文件: #include <algorithm> 或者 #include <numeric>...