### 《C++_面向对象程序设计_谭浩强》知识点总结
#### 一、C++简介
**1.1 从C到C++**
- **背景**: 计算机科学的发展经历了从早期的机器语言到汇编语言,再到高级语言的过程。
- **FORTRAN语言**: 1954年诞生的第一种高级编程语言,主要用于科学计算领域。
- **BASIC语言**: 1964年基于FORTRAN简化而成,适用于计算机初学者。
- **C语言**: 1972年由D.M.Ritchie开发,具有强大的系统级编程能力,被广泛应用于系统软件和应用软件的开发。
- **C++的发展**: 由Bjarne Stroustrup在20世纪80年代初基于C语言开发而成,保留了C的所有优点,并引入了面向对象的概念。
**1.2 最简单的C++程序**
- **示例代码**:
```cpp
#include<iostream>
using namespace std;
int main() {
cout << "This is a C++ program.";
return 0;
}
```
- **解析**:
- `#include<iostream>`: 引入输入输出流库(iostream),用于实现输入输出功能。
- `using namespace std;`: 声明使用标准命名空间`std`,简化了后续代码中使用标准库元素时的书写。
- `int main()`: 主函数,每个C++程序都必须有且只能有一个`main`函数作为程序的入口点。
- `cout`: 输出流对象,用于输出文本到屏幕或其他输出设备。
- `return 0;`: 表示程序正常结束,返回值0给操作系统。
#### 二、C++的基本知识
**1.3 C++程序的构成和书写形式**
- **程序构成**:
- 预处理指令:如`#include`、`#define`等。
- 函数定义:如`int main()`。
- 类定义:面向对象编程的基础。
- 变量声明和定义:存储数据的基本单位。
- 语句:完成特定任务的最小执行单元。
- **书写形式**:
- 使用大括号 `{}` 包围函数体。
- 每条语句后面都必须加上分号`;`。
- 多行注释使用 `/* ... */` 或单行注释使用 `//`。
**1.4 C++程序的编写和实现**
- **编写**:
- 使用文本编辑器或集成开发环境(IDE)创建源代码文件。
- 遵循C++语法规范。
- **实现**:
- 编译:将源代码转换成机器可执行的代码。
- 链接:将多个目标文件和库文件链接成一个可执行文件。
- 运行:执行编译好的程序。
**1.5 关于C++上机实践**
- **环境搭建**:
- 安装C++编译器(如GCC、Clang等)。
- 安装IDE(如Visual Studio Code、Eclipse等)。
- **调试技巧**:
- 使用断点调试。
- 输出变量值进行调试。
- 使用IDE提供的调试工具。
#### 三、面向过程的程序设计
**第2章 数据类型与表达式**
- **数据类型**:
- 基本类型:整型(int)、浮点型(float)、字符型(char)等。
- 复合类型:数组、结构体(struct)、联合体(union)等。
- **表达式**:
- 算术表达式:使用算术运算符进行数学运算。
- 关系表达式:使用关系运算符比较两个值。
- 逻辑表达式:使用逻辑运算符连接多个条件。
**第3章 程序设计初步**
- **控制结构**:
- 顺序结构:按照代码顺序执行。
- 分支结构:根据条件选择不同的路径执行(如if-else语句)。
- 循环结构:重复执行一段代码直到满足某个条件(如for、while循环)。
**第4章 函数与预处理**
- **函数**:
- 函数定义:指定函数名、参数列表和函数体。
- 函数调用:通过函数名来调用已定义的函数。
- **预处理**:
- 文件包含:使用`#include`指令导入其他文件。
- 宏定义:使用`#define`指令定义常量或宏。
**第5章 数组**
- **数组定义**:
- 定义数组时需指定数组类型和数组大小。
- 初始化数组可以通过初始化列表完成。
- **数组操作**:
- 访问数组元素:使用下标访问。
- 遍历数组:使用循环结构遍历数组中的元素。
**第6章 指针**
- **指针定义**:
- 指针变量存储内存地址。
- 定义指针变量时需指定指向的数据类型。
- **指针操作**:
- 解引用:使用`*`获取指针所指向的值。
- 地址运算:使用`&`获取变量的地址。
**第7章 自定义数据类型**
- **结构体(struct)**:
- 结构体定义:包含不同类型的成员变量。
- 结构体使用:定义结构体变量并访问其成员。
- **枚举类型(enum)**:
- 枚举定义:定义一组符号常量。
- 枚举使用:通过枚举名访问其成员。
#### 四、面向对象的程序设计
**第8章 类和对象**
- **类定义**:
- 类是一种用户自定义的数据类型。
- 包含数据成员和成员函数。
- **对象创建**:
- 创建类的对象实例。
- 调用构造函数初始化对象。
**第9章 关于类和对象的进一步讨论**
- **构造函数和析构函数**:
- 构造函数:用于初始化对象。
- 析构函数:在对象生命周期结束时释放资源。
- **静态成员**:
- 静态数据成员:属于类而非对象。
- 静态成员函数:无需对象即可调用。
**第10章 运算符重载**
- **概念**:
- 改变内置运算符的行为,使其适用于自定义类型。
- **实现**:
- 通过成员函数或友元函数实现运算符重载。
**第11章 继承与派生**
- **继承概念**:
- 允许一个类继承另一个类的属性和方法。
- **继承类型**:
- 公有继承(public): 子类可以访问父类的公有成员。
- 私有继承(private): 子类只能通过成员函数访问父类的私有成员。
- 保护继承(protected): 类似于私有继承,但子类可以访问父类的保护成员。
**第12章 多态性与虚函数**
- **多态性**:
- 同一个接口可以表现出不同的行为。
- 实现方式包括重载、覆盖以及纯虚函数。
- **虚函数**:
- 通过在基类中声明虚函数实现动态绑定。
- 虚函数可以在派生类中重新定义。
**第13章 输入输出流**
- **流对象**:
- `cin`: 标准输入流对象。
- `cout`: 标准输出流对象。
- **格式控制**:
- 使用流插入符`<<`和提取符`>>`。
- 设置格式标志,如`setw`、`setprecision`等。
**第14章 C++工具**
- **调试工具**:
- 使用断点、观察窗口等调试特性。
- **性能分析工具**:
- 分析程序执行时间、内存使用情况等。
- **版本控制系统**:
- Git等工具帮助团队协作和版本管理。
通过上述知识点的总结,我们可以看到《C++_面向对象程序设计_谭浩强》这本教材不仅涵盖了C++的基本概念和语法,还深入探讨了面向对象程序设计的核心思想和技术细节。无论是对于初学者还是有一定经验的程序员来说,这本书都是学习C++的重要参考资料之一。