C++语言是从 C语言发展演变而来的,
因此在介绍 C++语言之前,我们首先介
绍一下 C语言。 1972年至 1973年间,美
国贝尔实验室的 Denis.M.Ritchie在一台
DEC PDP-11计算机上实现了基于 B语言
的最初的 C语言。
C语言的产生基于两个方面的需要,
一是为满足 UNIX操作系统开发的需要;
二是为拉近高级语言与硬件之间距离的
需要。
教材、参考书与课时安排
?教材
C++语言程序设计教程与实验
温秀梅 丁学钧 主编
?参考书
全国计算机等级考试二级教程 C++语言程序设计
全国计算机等级考试二级考试大参考 C++语言程序设计
全国计算机等级考试命题研究组 珠海 出版社
?课时安排
授课, 32学时
上机实习, 32学时
课程设计,1周
第一章 C++语言概述
C++语言发展历史
基本语法成份
程序设计概述
一个简单的 C++程序
1.1 C++语言发展历史












面向过程
面向对象
CPU指令系统,由 0,1序列构成的指令码组成
如,10000000 加
10010000 减
用助记符号描述的指令系统
如 ADD A,B
面向机器的语言
程序设计是数据被加工的过程
客观世界可以分类,对象是类的实例
对象是数据和方法的封装
对象间通过发送和接受消息发生联系 程序设计关键是定义类,并由类派生对象
C++语言程序设计 第一章 绪论
?程序设计语言的发展
>
C++语言程序设计 第一章 绪论
1,机器语言,
第一代程序设计语言, 用机器语言编写的程序中,
每一条机器指令都是二进制形式的指令代码 。 它能被
计算机硬件系统直接识别, 不需翻译, 执行速度快 。
机器语言是面向机器的语言, 不能通用和移植 。
2,汇编语言,
第二代程序设计语言, 是符号化的机器语言 。
汇编语言也是面向机器的语言, 不具有通用性和可
移植性 。
<
面向机器,指语言随机器型号的不同而不同, 不
能通用和移植 。
3,高级语言,
第三代程序设计语言, 由各种意义的, 词, 和, 数
学公式, 按一定的, 语法规则, 组成 。 高级程序设计语
言具有很强的通用性和可移植性 。 它分为面向过程和面
向对象两种程序设计方法 。
C++语言程序设计 第一章 绪论
<
52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96
Ada
ALGOL60 ALGOL68
Pascal
Modula-2
CPL BCPL B C
C++
Java
LISP
PROLOG
COBOL
FORTRAN77 FORTRAN
PL/1
Simula 67
Smalltalk 80
BASIC ANSI-BASIC QBASIC VB
FORTRAN90
C++语言程序设计 第一章 绪论
? C++语言发展过程
?产生背景
?产生过程
?时间,1972~1973
?地点,美国贝尔实验室
?目的,UNIX操作系统
?设计人, Ken.Thompson和 Dennis.M.Ritchie
?C标准
?标准 C,K&R合著, The C Programming Language,
?ANSI C,1983年
?87 ANSI C,1987年
?1990年国际标准的 ANSI C
C++语言程序设计 第一章 绪论
语言简洁、紧凑、灵活
运算符和数据类型丰富
程序设计结构化、模块化
生成目标代码质量高
语法限制不太严格,程序设计自由度大
可移植性好
中级语言
C++语言程序设计 第一章 绪论
C++语言允许直接访问
物理地址,能进行位
操作,实现汇编语言
的大部分功能,可以
直接对硬件进行操作。
?C++语言的特点
C++语言程序设计 第一章 绪论
1.2 程序设计概述
回顾程序设计的发展史, 大体上可划分为以下几个不同的时期 。
50年代的程序都是用指令代码或汇编语言编写的, 这种程序的设计相
当麻烦, 编制和调试一个稍大一点的程序常常要花费很长时间, 培养一
个熟练的程序员更需经过长期训练和实习, 这种局面严重影响了计算机
的普及应用 。
60年代高级语言的出现大大简化了程序设计, 缩短了解题周期, 因此
显示出强大的生命力 。 此后, 编制程序已不再是软件专业人员才能做的
事了, 一般工程技术人员花上较短的时间学习, 也可以使用计算机解题
。 这个时期, 随着计算机的应用日益广泛地渗透到各学科和技术领域,
发展了一系列不同风格的, 为不同目标服务的程序设计语言 。 其中较为
著名的有 FORTRAN,COBOL,ALGOL,LISP,PL/1,PASCAL等十几种语言
。 高级语言的蓬勃兴起, 使得编译和形式语言理论相应日趋完善, 这是
该时期的主要特征 。 但就整个程序设计方法而言, 并无实质性的改进 。
1.2.1程序设计的发展历程
C++语言程序设计 第一章 绪论
自 60年代末到 70年代初, 出现了大型软件系统, 如操作系统, 数据库, 这
给程序设计带来了新的问题 。 大型系统的研制需要花费大量的资金和人力,
可是研制出来的产品却可靠性差, 错误多, 且不易维护和修改 。 一个大型操
作系统有时需要几千人 /年的工作量, 而所获得的系统又常常会隐藏着几百甚
至几千个错误 。 当时, 人们称这种现象为, 软件危机, 。
为了克服 60年代出现的软件危机, 1968年北约组织提出, 软件工程, 的概
念 。 对程序设计语言的认识从强调表达能力为重点转向以结构化和简明性为
重点, 将程序从语句序列转向相互作用的模块集合 。 1969年, E.W.Dijkstra
首先提出了结构化程序设计的概念, 他强调了从程序结构和风格上来研究程
序设计 。 在软件工程的迫切要求下, 70年代结构化语言获得蓬勃发展并得到
广泛应用 。 使用结构化程序设计方法可显著地减少软件的复杂性, 提高软件
的可靠性, 可测试性和可维护性 。 经过几年的探索和实践, 结构化程序设计
的应用确实取得了成效, 用结构化程序设计的方法编写出来的程序不仅结构
良好, 易写易读, 而且易于证明其正确性 。
进入 80年代, 由于一系列高技术的研究, 如第五代计算机, CAM和知识工
程等领域的研究都迫切要求大型的软件系统作为支撑 。 他们所用的数据类型
也超出了常规的结构化数据类型的范畴, 提出对图象, 声音, 规则等非结构
化信息的管理 。 为了适应这些应用领域的需要, 迫切要求软件模块具有更强
的独立自治性, 以便于大型软件的管理, 维护和重用 。 由于结构化语言的数
据类型较为简单, 所以不能胜任对非结构化数据的定义与管理, 采用过程调
用机制也不够灵活, 独立性较差 。
C++语言程序设计 第一章 绪论
为了适应高技术发展的需要, 消除结构化编程语言的局限, 自 80年代以来, 出
现了面向对象程序设计流派, 研制出了多种面向对象编程语言 ( 简称为 OOPL),
如 Ada,Smalltalk,C++和当前使用在 Internet上的平台无关语言 Java等 。
由于 OOPL的对象, 类具有高度的抽象性, 所以它能很好地表达任何复杂的数据
类型, 也允许程序员灵活地定义自己所需要的数据类型 。 类本身具有很完整的封
装性, 可以使用它作为编程中的模块单元, 满足模块独立自治的需求 。 再加上继
承性和多态性, 更有助于简化大型软件和大量重复定义的模块, 增强了模块的可
重用性, 提高了软件的可靠性, 缩短了软件的开发周期 。
1.2.2结构化程序设计
采取以下方法可以得到结构化的程序,
1.自顶向下, 逐步细化
结构化程序设计的主要思想是功能分解并逐步求精 。 当一些任务复杂以至无法描
述时, 可以将它拆分为一系列较小的功能部件, 直到这些完备的子任务小到易于
理解的程度 。 这种方法叫, 自顶向下, 逐步细化, 。
2.模块化设计
在程序设计中常采用模块化设计的方法, 尤其是当程序比较复杂时, 更有必要 。
在拿到一个程序模块 ( 实际上是程序模块的任务书 ) 以后, 根据程序模块的功能
将它划分为若干个子模块, 如果嫌这些子模块的规模大, 还可以划分为更小的模
块 。 这个过程采用自顶向下方法来实现 。 结构化程序设计方法可以解决人脑思维
能力的局限性和所处理问题的复杂性之间的矛盾 。
C++语言程序设计 第一章 绪论
3.结构化编码
在设计好一个结构化的算法之后, 还要善于进行结构化编码 。 即用高级语言语句
正确地实现顺序, 选择, 循环三种基本结构 。
1.2.3面向对象程序设计
1,对象
对象是计算机内存中的一块区域,通过将内存分块,每个模块(即对象)在功
能上相互之间保持相对独立。当对象的一个成员函数被调用时,对象执行其内部
的代码来响应这个调用,这使对象呈现出一定的行为。行为及其结果就是该对象
的功能。
2,面向对象
面向对象是一种认识世界的方法也是一种程序设计方法 。 面向对象的观点认为
,客观世界是由各种各样的实体, 也就是对象组成的 。 每种对象都有自己的内部
状态和运动规律, 不同对象间的相互联系和相互作用就构成了各种不同的系统,
并进而构成整个客观世界 。 按照这样的思想设计程序, 就是面向对象的程序设计
。, 面向对象, 不仅仅作为一种技术, 更作为一种方法贯穿于软件设计的各个阶

3,面向对象程序设计
面向对象程序设计是在面向过程的程序设计基础上的质的飞跃。面向对象方法
的产生,是计算机科学发展的要求。面向对象的技术在系统程序设计、数据库及
多媒体应用等领域都得到广泛应用。
C++语言程序设计 第一章 绪论
4.面向对象程序设计的特点
(1) 抽象性
面向对象鼓励程序员以抽象的观点看待程序,即程序是由一组对象组成的。我
们可以将一组对象的共同特征进一步抽象出来,从而形成, 类, 的概念。抽象是
一种从一般的观点看待事物的方法,它要求程序员集中于事物的本质特征,而不
是具体细节或具体实现。类的概念来自人们认识自然、认识社会的过程。在这一
过程中,人们主要使用两种方法:从特殊到一般的归纳法和从一般到特殊的演绎
法。在归纳的过程中,我们从一个个具体的事物中把共同的特征抽取出来,形成
一个一般的概念,这就是, 归类, ;在演绎的过程中,我们又把同类的事物,根
据不同的特征分成不同的小类,这就是, 分类, 。对于一个具体的类,它有许多
具体的个体,我们就管这些个体叫做, 对象, 。
(2) 封装性
所谓数据封装就是指一组数据和与这组数据有关的操作集合组装在一起,形成
一个能动的实体,也就是对象。数据封装就是给数据提供了与外界联系的标准接
口,无论是谁,只有通过这些接口,使用规范的方式,才能访问这些数据。数据
封装是软件工程发展的必然产物,使得程序员在设计程序时可以专注于自己的对
象,同时也切断了不同模块之间数据的非法使用,减少了出错的可能性。
(3) 继承性
从已有的对象类型出发建立一种新的对象类型,使它继承原对象的特点和功能
,这种思想是面向对象设计方法的主要贡献。
C++语言程序设计 第一章 绪论
继承是对许多问题中分层特性的一种自然描述,因而也是类的具体化和被重新
利用的一种手段,它所表达的就是一种对象类之间的相交关系。它使得某类对象
可以继承另外一类对象的特征和能力。继承所具有的作用有两个方面:一方面可
以减少代码冗余;另一方面可以通过协调性来减少相互之间的接口和界面。
(4)多态性
不同的对象可以调用相同名称的函数,并可导致完全不同的行为的现象称为多
态性。利用多态性,程序中只要进行一般形式的函数调用,函数的实现细节留给
接受函数调用的对象。这大大提高了我们解决复杂问题的能力。
1.3 基本语法成分
1.3.1字符集
字符是可以区分的最小符号,构成程序的原始基础 。 C++语言字符集是 ASCII字
符集的一个子集, 是由下列字符组成的,
1.大小写英文字母,a~ z和 A~ Z
2.十个数字,0~ 9
3.特殊字符:空格, !, #, %,^,&,*,-, -,+,=,~, <,>,/,\、
|,,,:,;,?, ′, ″, (,),[, ], {,}
由字符集中的字符可以构成 C++语言的各种词法符号, 如标识符, 关键字,
特殊的运算符等 。
C++语言程序设计 第一章 绪论
1.3.2标志符
标识符在程序中用来标识各种程序成份,是程序员定义的名字, 用作变量名,
函数名, 类型名等 。 标识符由大小写字符, 0到 9的数字和下划线组成, 标识符的
使用规则是,
(1) 以字母或下划线打头 。
(2) 其后可跟零个或多个字母, 数字或下划线 。
标识符的长度可以是任意的, 但不同的 C++编译器能识别的最大长度是有限的
,编译器忽略掉多余的字符, 而不认为是个错误 。
以下是合法的标识符,
x,c,a1,a2,op,y_1,zhou_prg,radius,prime,program,prg_1,
sun,day
以下是不合法的标识符,
a-1,1computer,x+y,!abc,$100,π,3c
使用标识符时, 需要注意以下几点,
1.在 C++中, 大小写字母不等价 。 如 ABC和 abc是不同的标识符 。 习惯上符号常
量用大写字母表示,变量名称用小写字母表示 。
2.最好不要定义以下划线打头的标识符, 以免和 C++系统库中的符号冲突, 因
为在 C++系统库中保存的符号信息都是以下划线开始的 。
3.不要在标识符内部使用连续的两个下划线 。
C++语言程序设计 第一章 绪论
4.标识符取名时不能与关键字同名,也不能与系统预先定义的标准标识符 ( 如标
准函数 ) 同名,最好能, 见名知义,,如 max表示最大值, date表示日期 。 以提
高程序的可读性 。 一般选用相应英文单词或拼音的缩写形式, 尽量不要使用简
单代数符号, 如 a,b,c,x,y,z等 。
1.3.3关键字
关键字又称为保留字,由系统提供,在程序中表示固定的意义, 它们不能被重
新定义, 是构成 C++语言的语法基础 。 如类型名称 int,float,语句特征 if、
switch,while,运算符号 sizeof等 。
C++中的关键字如表 1.1所示, 其中 ANSI C规定有 32个关键字, 表中用斜体字表
示 。 ANSI C++在此基础上又补充了 29个关键字, 表中用黑体加粗字表示 。
注意,C++中的关键字必须小写 。
C++语言程序设计 第一章 绪论
表 1.1 C++关键字表
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volaile
while
bool
catch
class
const_cast
delete
dynamic_cast
explicit
false
friend
inline
mutable
namespace
new
operator
private
protected
public
reinterpret_cast
static_cast
template
this
throw
true
try
typeid
typenam
e
using
virtual
wchar_t
? 算术运算符,+ - * / % ++ --
? 关系运算符,< <= == > >= !=
? 逻辑运算符,! && ||
? 位运算符, << >> ~ | ^ &
? 赋值运算符,= 及其扩展
? 条件运算符,?,
? 逗号运算符:,
? 指针运算符,* &
? 求字节数, sizeof
? 强制类型转换,(类型)
? 分量运算符,,->
? 下标运算符,[]
? 其它, ( ) -
C++语言程序设计 第一章 绪论
1.3.4 运算符,
丰富的运算符使
C++的运算类型更
丰富,
表达式类型更多,
有利于实现较难的
运算。
C++语言程序设计 第一章 绪论
1.3.5 分隔符,
分隔符用于分隔各个词法记号或程序正文 。 分隔符不表示任何实际的操作, 仅用
于构造程序, 表示某个程序实体的结束和另一个程序实体的开始 。 C++常用的分
割符有以下几个,
1.花括号 { }用来为函数体, 复合语句等定界 。
2.分号;作为语句的分隔符 。
3.逗号, 用作变量之间或对象之间的分割符, 或用作函数的多个参数之间的分割
符 。
4.空格用作单词之间的分割符 。
1.3.6 空白符,
在程序编译时的词法分析阶段将程序正文分解为词法记号和空白。空白是空格
、制表符 (TAB键产生的字符 )、换行符 (Enter键所产生的字符 )和注释的总称。
空白符用于指示词法记号的开始和结束位置, 但除了这一功能之外, 其余的空
白将被忽略 。 因此, C++程序可以不必严格地按行书写, 凡是可以出现空格的地
方, 都可以出现换行 。 但是尽管如此, 我们在书写程序时, 仍要力求清晰, 易读
。 因为一个程序不仅要让机器执行, 还要让人阅读, 同时便于修改, 维护 。
注释是对程序的注解和说明, 目的是为了便于程序的阅读和分析 。
if( )~else~
for( )~
while( )~
do~while( )
continue
break
switch
goto
return
C++语言程序设计 第一章 绪论
1.3.7 9种控制语句,
C++语言 Pascal语言 含义
{ } BEGIN….END 复合语句
if(e) s; IF(e) THEN s 条件语句
int i ; VAR i:INTEGER 定义 i为整型变量
int a[10]; VAR a:ARRAY[1..10] OF INTEGER 定义整型数组 a
int f(); FUNCTION f():INTEGER 定义 f为返值整型的函数
int *p; VAR p:?INTEGER 定义 p为指向整型变量的指针
i+= 2; I:=i+2 赋值 i+2?i
i++,++i; I:=i+1 i自增值
结论,C++比 Pascal 简练,源程序短
C++语言程序设计 第一章 绪论
1.3.8 C++语言与 Pascal语言比较,
/* Example1.1 The first C Program*/
# include <stdio.h>
main()
{
cout<<" This is a C++ program.\n "<<endl;
}
C++语言程序设计 第一章 绪论
注释
编译预处理
函数
语句
1.4 简单的 C++程序介绍
C ++语言程序的总体结构,一个完整的C ++语言程序,是由一个 main()
函数(又称主函数)和若干个其它函数结合而成的,或仅由一个 main()函
数构成。本例是仅由 main()函数构成的C ++语言程序。
例 1.1
#include <stdio.h>
main () /* 主函数 */
{ int a,b,c; /* 声明部分,定义变量 */
cin>>&a>>&b; /* 输入变量 a 和 b 的值 */
c= max (a,b); /* 调用 max 函数,得到的值赋给 c*/
cout<<c; /* 输出 c 的值 */
}
int max (int x,int y) /*定义 max 函数 */
{ int z;
if (x>y) z=x;
else z=y;
return (z); /* 返回函数的值 */
}
C++语言程序设计 第一章 绪论
例 1.2
函数调用
?习惯用 小写 字母,大小写敏感
?不使用行号,无程序行 概念
?可使用空行和空格
?常用 锯齿形 书写格式
C++语言程序设计 第一章 绪论
main( )
{ ………………,
………………
………….,
………….,
………
………,
……………
……………,
………………,
……………….,
}
main( )
{
int i,j,sum;
sum=0;
for(i=1; i<10;i++)
{
for(j=1;j<10;j++)
{
sum+=i*j ;
}
}
cout<<sum<<endl;
}
优秀程序员的素质之一,
?使用 TAB缩进
?{}对齐
?有足够的注释
?有合适的空行
1, 格式特点,
?函数与主函数
?程序由一个或多个函数组成
?必须有且只能有一个主函数 main()
?程序执行从 main开始,在 main中结束,其它函数通过嵌
套调用得以执行。
?程序语句
?C程序由语句组成
?用,;”作为语句终止符
?注释
?/* */为注释,不能嵌套
?不产生编译代码
例,/*This is the main /* of example1.1*/ */
非法
?编译预处理命令
C++语言程序设计 第一章 绪论
2, 结构特点,
3,函数的一般结构
任何函数 ( 包括主函数 main()) 都是由函数说明和函
数体两部分组成 。 其一般结构如下,
[函数类型 ] 函数名 (函数参数表 ) 函数说明部分
{ 说明语句部分;
执行语句部分; 函数体部分
}
① 函数说明,由函数类型 ( 可缺省 ), 函数名和函数
参数表三部分组成 。
函数类型 函数名 函数参数表
↓ ↓ ↓
int max ( int x,int y )
C++语言程序设计 第一章 绪论
② 函数体,在函数说明部分的下面, 大括号 ( 必须配对
使用 ) 内的部分 。 函数体一般由说明语句和可执行语句两部
分构成,
说明语句部分由变量定义, 自定义类型定义, 自定义函
数说明, 外部变量说明等组成 。
可执行语句 一般由若干条可执行语句构成 。