Skip to content

第1章 预备知识

本章内容

  • C语言和C++的发展历史和基本原理
  • 过程性编程和面向对象编程
  • C++是如何在C语言的基础上添加面向对象概念的
  • C++是如何在C语言的基础上添加泛型编程概念的
  • 编程语言标准
  • 创建程序的技巧

1.1 C++简介

C++融合了3种不同的编程方式:

  • C语言代表的过程性语言
  • **C++**在C语言基础上添加的类代表的面向对象语言
  • **C++**模板支持的泛型编程

C++语言合并了底层和高层特性,既适合底层系统编程,也适合高级应用编程。


1.2 C++简史

1.2.1 C语言

20世纪70年代早期,贝尔实验室的Dennis Ritchie致力于开发UNIX操作系统。为完成这项工作,Ritchie需要一种语言,它必须简洁,能够生成简洁、快速的程序,并能有效地控制硬件。

Ritchie希望有一种语言能将低级语言的效率、硬件访问能力和高级语言的通用性、可移植性融合在一起,于是他在旧语言的基础上开发了C语言。

1.2.2 C语言编程原理

C语言最初是过程性(procedural)语言,强调的是编程的算法方面。程序命令计算机按一系列流程生成特定的结果。

结构化编程

  • 将分支限制为一小组行为良好的结构
  • C语言包含:for循环、while循环、do-while循环和if-else语句

自顶向下设计

  • 将大型程序分解成小型、便于管理的任务
  • 如果其中的一项任务仍然过大,则将它分解为更小的任务
  • 鼓励程序员开发程序单元(函数)来表示各个任务模块

1.2.3 面向对象编程(OOP)

OOP与强调算法的过程性编程不同,OOP强调的是数据。其理念是设计与问题的本质特性相对应的数据格式。

在C++中:

  • :一种规范,描述了数据格式
  • 对象:根据这种规范构造的特定数据结构

OOP的核心概念:

  • 抽象:提取事物的本质特征
  • 封装:隐藏实现细节
  • 继承:从已有类派生新类
  • 多态:同一接口支持不同实现

OOP编程方法:

  • 首先设计类,准确地表示程序要处理的东西
  • 从低级组织(如类)到高级组织(如程序)的处理过程叫做自下向上的编程

1.2.4 C++和泛型编程

泛型编程(generic programming)是C++支持的另一种编程模式。它与OOP的目标相同,即使重用代码和抽象通用概念的技术更简单。

  • OOP强调的是编程的数据方面
  • 泛型编程强调的是独立于特定数据类型
  • C++模板提供了泛型编程的机制

1.2.5 C++的起源

C++在贝尔实验室诞生,Bjarne Stroustrup于20世纪80年代开发了这种语言。

关键点:

  • C++主要是为了更方便地编写出好程序
  • C++的OOP方面受到了计算机模拟语言Simula 67的启发
  • C++是C语言的超集,任何有效的C程序都是有效的C++程序
  • 名称C++来自C语言中的递增运算符++

1.3 可移植性和标准

1.3.1 C++的发展

时间里程碑
1983C++正式命名
1985第一本C++参考手册《The C++ Programming Language》
1990ANSI/ISO C++标准委员会成立
1994C++98标准草案发布
1998C++98/ISO标准发布(ISO/IEC 14882:1998)
2003C++03标准发布(技术性修订)
2011C++11标准发布(ISO/IEC 14882:2011)

1.3.2 本书遵循的C++标准

本书基于 ISO/IEC 14882:2011(即C++11)标准编写。

C++11新增特性:

  • auto 类型推断
  • 范围for循环
  • Lambda表达式
  • 智能指针
  • 移动语义
  • nullptr

1.4 程序创建的技巧

1.4.1 创建源代码文件

C++源代码文件扩展名:

C++实现源代码文件的扩展名
UNIXC、CC、CXX、c
GNU C++C、cC、cxx、cpp、c++
Digital Marscpp、cxx
Borland C++cpp
Watcomcpp
Microsoft Visual C++cpp、cxx、cc
Freestyle CodeWarriorcp、cpp、cC、cxx、c++

1.4.2 编译和链接

程序创建过程:

源代码 → 预处理 → 编译 → 汇编 → 链接 → 可执行文件
阶段说明输入 → 输出
预处理处理#开头的指令.cpp.i
编译翻译为汇编语言.i.s
汇编翻译为机器语言.s.o
链接合并库和目标文件.o + 库 → 可执行文件

编译指令示例

bash
# UNIX/Linux
g++ -o hello hello.cpp

# Windows (MinGW/Cygwin)
g++ great.cpp

1.5 总结

  • C++融合了C语言的过程性特性和OOP特性
  • C++遵循ISO标准,C++11是本书重点
  • 源代码需要经过编译和链接才能生成可执行程序
  • 可移植性是C++的重要特性之一

基于 VitePress 构建