1.1 简介
C++ 融合了3中不同的编程方式:
- C语言代表的过程性语言
- 类代表的面向对象语言
- C++模板代表的泛型编程
1.2 简史
1.2.2 C语言
时间 |
地点 |
人物 |
目的 |
20世纪70年代早期 |
贝尔实验室 |
Dennis Ritchie(丹尼斯·里奇 ) |
开发一种将低级语言的效率、硬件访问能力和高级语言的通用性、可移植性融合一起的语言用于开发UNIX操作系统 |
1.2.2 C语言编程原理
- 程序=数据+算法
- 过程性语言强调编程的算法方面
- 结构化编程(structured programming)解决语句组织混乱的问题,C中使用for循环、while循环、do while循环和if else语句
- 自顶向下(top-down)的设计,大任务分解成小任务
1.2.3 面向对象编程
- OOP强调的是数据,理念是设计与问题的本质特性相对应的数据结构(即类)
- OOP程序设计方法首先设计类,这种从低级组织(如类)到高级组织(如程序)的处理过程就是自下向上(bottom-up)的编程
- OOP的其他新理念:信息隐藏、多态、继承
1.2.4 C++和泛型编程
- 泛型编程(generic programming)强调独立于特定的数据类型
- 只编写一个泛型函数,并将其用于各种数据类型
- C++ 模板提供了这种机制
1.2.5 C++ 的起源
- C++ 是C语言的超集,任何有效的C程序都是有效的C++程序
- 名称C++来自C语言中的递增运算符++,这表明它是C的扩充版本
- OOP部分赋予C++将问题涉及的概念联系起来的实力,C部分则赋予C++紧密联系硬件的能力
- 在C++获得一定程度成功后,Stroustrup才添加了模板,使得泛型编程成为可能
1.3 可移植性和标准
可移植性存在两个障碍:
障碍 |
解决方案 |
硬件差异 |
将依赖于硬件的部分放到函数模块中,最大限度地降低可移植性问题 |
语言差异 |
制定C++语言标准,ANSI/ISO联合组织 |
C++国际标准之路:
标准 |
发布时间 |
特性 |
C++98 |
1998 |
描述C++已有特性;添加了异常、RTTI和STL |
C++03 |
2003 |
修订错误、减少多义性 |
C++11 |
2011 |
消除不一致性;加入了大部分的C++ Technical Report 1程序库(数学上的特殊函数除外) |
C++14 |
2014 |
支持普通函数的返回类型推演,泛型 lambda,扩展的 lambda 捕获,对 constexpr 函数限制的修订,constexpr变量模板化 |
1.4 程序创建的技巧
1.4.1 创建源代码文件
扩展名是后缀由一个句点和一个或多个字符组成,使用什么扩展名取决于C++实现。
C++****实现 |
源文件扩展名 |
UNIX |
C(C ++程序使用C,部分支持cc、cxx)、c(C程序使用c) |
GNU C++ |
C、cc、cpp、cxx、c++ |
Microsoft Visual C++ |
cpp、cxx、cc |
1.4.2 编译和链接
发展历程:
- 使用一个C++到C的编译器程序(即cfront)
- 开发直接的C++到目标代码的编译器
C++实现 |
编译和链接方法 |
UNIX |
CC spiffy.C //编译 <br /> CC my.C spiffy.o -lm //链接之前输出的目标代码,-lm表示链接数学库中的函数 <br /> a.out //执行 |
GNU C++ |
g++ spiffy.cxx //编译 <br /> g++ my.cxx spiffy.o -lg++ //链接之前输出的目标代码,-lg++表示链接C++库<br /> a.out //执行 |
Microsoft Visual C++ |
Compile:编译<br /> Build和Make:编译项目中所有源代码文件的代码,只重新编译该文件 <br /> Build All:重新编译所有的源代码文件<br /> Link:将编译后的源代码与所需的库代码组合起来 <br /> Run或Execute:运行程序 <br /> Debug:以步进的方式执行程序 |