C++ Primer Plus 第1章 预备知识


C++在C语言的基础上添加了对面向对象编程和泛型编程的支持。
C++继承了C语言高效、简洁、快速和可移植性的传统。
C++面向对象的特性带来了全新的编程方法,这种方法是为应付复杂程度不断提高的现代编程任务而设计的。
C++的模板特性提供了另一种全新的编程方法——泛型编程。
面向对象的编程(OOP:object oriented programing)

1.1 C++简介

C++融合了3种不同的编程方式:C语言代表的过程性语言、C++在C语言基础上添加的类代表的面向对象语言、C++模板支持的泛型编程。

1.2 C++简史

1.2.1 C语言

1、操作系统是能够管理计算机资源、处理计算机与用户之间交互的一组程序。
2、汇编语言
(1)依赖于计算机的内部机器语言。
(2)是低级语言,直接操作硬件,如直接访问CPU寄存器和内存单元。
(3)针对于特定的计算机处理器,要将汇编程序移植到另一种计算机上,必须使用不同的汇编语言重新编写程序,不方便移植。
3、高级语言致力于解决问题,而不针对特定的硬件。
4、编译器
(1)将高级语言翻译成特定计算机的内部语言的特殊程序。
(2)可通过对每个平台使用不同的编译器来在不同的平台上使用同一个高级语言程序。
5、C语言:融合了低级语言的效率、硬件访问能力和高级语言的通用性、可移植性。

1.2.2 C语言编译原理

1、计算机语言要处理两个概念——数据和算法。数据是程序使用和处理的信息,而算法是程序使用的方法。
2、C语言
(1)是过程性语言(首先要确定计算机应采取的操作,然后使用变成语言来实现这些操作)。
(2)强调的是编程的算法方面。
(2)结构化编程:将分支限制为一小组行为良好的结构。
(3)自顶向下的设计:将大型程序分解成小型、便于管理的任务,鼓励程序员开发程序单元(函数)来表示各个任务模块。
(4)结构化编程技术反映了过程性编程的思想,根据执行的操作来构思一个程序。

1.2.3 面向对象编程

1、OOP强调的是数据。
2、OOP不像过程性编程那样,试图使问题满足语言的过程性方法,而是试图让语言来满足问题的要求。其理念是设计与问题的本质特性相对应的数据格式
3、在C++中,是一种规范,它描述了这种新型数据格式对象是根据这种规范构造的特定数据结构
4、类规定了可使用哪些数据来表示对象以及可以对这些数据执行哪些操作。
5、根据类定义创建对象,对象是类的实例化
6、OOP程序设计方法首先设计类,它们准确地表示了程序要处理的东西。然后设计一个使用类的对象的程序。
7、从低级组织(如类)到高级组织(如程序)的处理过程叫做自下向上的编程。
8、OOP编程:
(1)将数据和方法合并为类定义
(2)创建可重用代码
(3)信息隐藏:保护数据,使其免遭不适当的访问
(4)多态:为运算符和函数创建多个定义,通过编程上下文来确定使用哪个定义
(5)继承:使用旧类派生出新类
9、OOP不是将重点放在任务上,而是放在表示概念上。

1.2.4 C++和泛型编程

1、泛型编程(generic programming)强调独立于特定数据类型,创建独立于类型的代码。
2、泛型编程需要对语言进行扩展,以便可以只编写一个泛型(即不是特定类型的)函数,并将其用于各种实际类型。
3、C++模板提供了完成这种任务的机制。

1.2.5 C++的起源

1、C++是C语言的超集,这意味着任何有效的C程序都是有效的C++程序。
2、C++程序可以使用已有的C软件库。是编程模块的集合,可以从程序中调用它们。
3、C++的二重性
(1)OOP部分赋予了将问题所涉及的概念联系起来的能力
(2)C部分赋予了紧密联系硬件的能力

1.3 可移植性和标准

如果在不修改代码的情况下,重新编译程序后,程序将运行良好,则该程序是可移植的。
可移植性的两个障碍:
(1)硬件,硬件特定的程序是不可移植的
(2)语言差异

1.3.1 C++的发展

1.3.2 本书遵循的C++标准

1.4 程序创建的技巧

程序如何运行:
(1)使用文本编辑器编写程序,并将其保存到文件中,这个文件就是程序的源代码
(2)编译源代码。将源代码翻译为主机使用的内部语言——机器语言。包含了翻译后的程序的文件就是程序的目标代码
(3)将目标代码与其他代码链接起来。链接指的是将目标代码同使用的函数的目标代码以及一些标准的启动代码组合起来,生成程序的运行阶段版本。包含该最终产品的文件被称为可执行代码

源代码
编译器
目标代码
链接程序
可执行代码
启动代码
库代码

有些编译器要求使用特定的标记,让其支持部分C++11特性,例如,从4.3版起,g++要求编译源代码文件时使用标记-std=c++0x(例:g++ -std=c++0x xxx.cpp)

1.4.1 创建源代码文件

集成开发环境(IDE, integrated development enviroments)
给源文件命名时,必须使用正确的后缀,将文件标识为C++文件。后缀由一个句点和一个或多个字符组成,这些字符被称作扩展名。使用什么扩展名取决于C++实现。

1.4.2 编译和链接

1、UNIX编译和链接

CC spiffy.C
链接
C++源代码文件spiffy.C
目标代码文件spiffy.o
可执行文件a.out

(1)CC编译器是命令行编译器,需要在UNIX命令行上输入编译命令。
(2)编译器自动将目标代码文件传递给系统链接程序,该程序将代码与库代码结合起来,生成可执行文件。
(3)如果只使用一个源文件,链接程序还将删除spiffy.o文件。
(4)运行该程序,只要输入可执行文件的文件名即可。
(5)如果编译新程序,新的可执行文件a.out将覆盖已有的a.out。

CC my.C precious.C
链接
CC my.C precious.o
C++源代码文件my.C和precious.C
目标代码文件my.o和precious.o
可执行文件a.out
修改my.C文件

(6)如果有多个源代码文件,则编译器不会删除目标代码文件。
(7)可能需要显式地指定一些库。例如,要访问数学库中定义的函数,必须在命令行中加上-lm标记:
CC unsingmath.C -lm
2、Linux编译和链接

g++ spiffy.cxx
链接
C++源代码文件spiffy.cxx
目标代码文件spiffy.o
可执行文件a.out
g++ my.cxx precious.cxx
链接
g++ my.cxx precious.o
C++源代码文件my.cxx和precious.cxx
目标代码文件my.o和precious.o
可执行文件a.out
修改my.cxx文件

有些版本可能要求链接C++库:g++ spiffy.cxx -lg++
3、Windows命令行编译器

g++ great.cpp
C++源代码文件great.cpp
可执行文件a.exe

4、Windows编译器
(1)Compile通常意味着对当前打开的文件中的代码进行编译
(2)Build和Make通常意味着编译项目中所有源代码文件的代码。这通常是一个递增过程,也就是说,如果项目包含3个文件,而只有其中一个文件被修改,则只重新编译该文件
(3)Build All通常意味着重新编译所有的源代码文件
(4)Link意味着将编译后的源代码与所需的库代码组合起来
(5)Run或Execute意味着运行程序。通常,如果您还没有执行前面的步骤,Run将在运行程序之前完成这些步骤
(6)Debug意味着以步进方式执行程序
为查看输出,必须在程序的最后加上一些代码:

cin.get();
cin.get();

cin.get()语句读取下一次键击,因此上述语句让程序等待,直到按下了Enter键(在按下Enter键之前,键击将不被发送给程序,因此按其他键都不管用)。如果程序在其常规输入后留下一个没有被处理的键击,则第二条语句是必须的。例如,如果要输入一个数字,则需要输入该数字,然后按Enter键,程序将读取该数字,但Enter键不被处理,这样它将被第一个cin.get()读取。
5、Macintosh上的C++

1.5 总结

随着计算机的功能越来越强大,计算机程序越来越庞大而复杂。为应对这种挑战,计算机语言也得到了改进,以便编程过程更为简单。C语言新增了诸如控制结构和函数等特性,以便更好地控制程序流程,支持结构化和模块化程度更高的方法;而C++增加了对面向对象编程和泛型编程的支持,这有助于提高模块化和创建可重用代码,从而节省编程时间并提高程序的可靠性。
C++的流行导致大量用于各种计算平台的C++实现得以面世;而ISOC++标准(C++98/03和C++11)为确保众多实现的相互兼容提供了基础。这些标准规定了语言必须具备的特性、语言呈现出的行为、标准库函数、类和模板,旨在实现该语言在不同计算平台和实现之间的可移植性。
要创建C++程序,可创建一个或多个源代码文件,其中包含了以C++语言表示的程序。这些文件是文本文件,它们经过编译和链接后将得到机器语言文件。后者构成了可执行的程序。上述任务通常是在IDE中完成的,IDE提供了用于创建源代码文件的文本编辑器、用于生成可执行文件的编译器和链接器以及其他资源,如项目管理和调试功能。然而,这些任务也可以在命令行环境中通过合适的工具来完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值