第一章
C++基础课后学习
屏蔽了机器的细节,接近自然语言 机 器 语 言 汇 编 语 言 高 级 语 言 面 向 对 象 语 言
CPU指令系统,由0、1序列构成的指令码组成 面向过程的语言 面向机器的语言 更直接地描述客观世界中存在的事 用助记符号描述的指令系统 如:10000000 加 物(即对象)以及它们之间的关系 如 ADD 10010000 减 A, B
源程序2
目标程序
图1-1 计算机程序设计语言的发展
软件作坊第一代
面向“机器”的方法
机器语言、汇编语言
基于功能分解,数据与操作分离第二代
面向“过程”的方法
FORTRAN 、 PASCAL 、 Turbo C
基于对象分解,封装数据与操作第三代 面向“对象”的方法 C++ 、 VC++ 、 JAVA 、 http://、C#
图1-2 程序设计方法的发展阶段3
C++的发展史 贝尔实验室的Bjarne Stroustrup在C语言的基础上,创建 了C++语言,它是为UNIX系统环境设计的。C++语言增强 了C语言的能力,使得程序员能够改进编写程序的质量, 并易于程序代码的复用。C++语言的ISO标准已在1997年 11月被一致通过,1998年8月被正式批准。 C语言发展史: C语言是美国贝尔实验室在1969~1973年开发的,与此同时,还 用它开发了UNIX操作系统。 C语言又是由B语言衍生而来的。 B语言是贝尔实验室的Ken Thompson在BCPL语言的基础上开发 的,并用它编写了第一个UNIX操作系统。 BCPL语言是英国剑桥大学的Martin Richards,60年代在美国MIT 时设计的。4
面向对象语言的发展 20世纪60年代开发的Simula 67,它是面向对象语言的鼻祖。它将 Algol 60中的块结构向前推进了一大步,提出了对象的概念。 20世纪70年代出现的Ada语言是支持数据抽象类型的最重要的语言之 一。但是,Ada语言不是全面的支持继承,因此人们常称它为一种基 于对象的语言。 Smalltalk语言是最有影响的面向对象的语言之一。它丰富了面向对象 的概念。该语言并入了Simula语言的许多面向对象的特征,包括类和 继承等。在该语言中,信息的隐藏更加严格,每种实体都是对象。 C++作为一门混合型语言,在增加对于面向对象方法的支持的同时, 还继承了传统程序设计语言C的优点,克服了其不足之处,使得自身 既适用于结构化程序设计,又能满足面向对象程序设计的要求,这就 符合广大程序员逐步更新其程序设计观念和方法的要求,因而很快流 行起来。总之,对于传统的财富不是完全抛弃,而是继承并发展之, 是C++语言成功的重要原因。
C/C++传统头文件文件名assert.h float.h iostream.h
用途设定插入点 浮点数处理 数据流输入/输 出
文件名ctype.h fstream.h limits.h
用途字符处理 文件输入/输出 定义各种数据类 型
最值常量
文件名errno.h iomanip.h locale.h
用途定义错误码 参数化输入/输 出 定义本地化函数
math.hstring.h wchar.h
定义数学函数字符串处理 宽字符处理及 输入/输出
stdio.hstrstream. h wctype.h
定义输入/输出 函数基于数组的输入 /输出 宽字符分类
stdlib.htime.h
定义杂项函数及 内存分配函数定义关于时间的 函数
标准C++头文件2-1文件名algorithmcctype clocale complex cstdlib ctime exception 异常处理类 复数类
用途STL 通用算法
文件名bitsetcerrno cmath cstdio cstring deque fstream
用途STL位集容器
STL双端队列容器
functionallist
STL 定义运算函数 (代替运算符)STL 线性列表容器
limitsmap STL 映射容器
using namespace std;7
标准C++头文件2-2文件名iomanip iosfwd istream
用途
文件名ios
用途基本输入/输出支持
输入/输出系统使用的 iostream 前置声明 基本输入流 ostream 基本输出流
queuesstream stdexcept string vector cwctype
STL 队列容器基于字符串的流 标准异常类 字符串类 STL 动态数组容器
setstack streambuf utility cwchar
STL 集合容器STL 堆栈容器 底层输入/输出支持 STL 通用模板类
using namespace std;8
C++对C语言的改进 注释: 在C语言块注释的形式/*Explanation Sentence*/的基础 上,C++语言提供了一种新的单行注释形式: //Explanation Sentence即用“//”表示注释开始,从该位 置直到当前行结束的所有字符都被作为注释。
更加灵活的变量声明: 可以在程序代码块的任何地方进行局部变量的说明。 比如下面的代码在C语言中是不正确的,在C++语言中 却可以正常运行。for(int i = 1; i < = 100; i++);这样做的 好处是使变量的定义和它的使用集中在一起,意义一 目了然。
C++标准库 标准库中提供了C++程序的基本设施。虽然C++标准库随 着C++标准折腾了许多年,直到标准的出台才正式定型, 但是在标准库的实现上却很令人欣慰得看到多种实现,并 且已被实践证明为有工业级别强度的佳作。 Dinkumware C++ Library:P.J. Plauger编写的高品质的标准库。 P.J. Plauger博士是Dr. Dobb s程序设计杰出奖的获得者。其编写 的库长期被Microsoft采用 RogueWave Standard C++ Library:这个库在Borland C++ Builder的早期版本中曾经被采用,后来被其他的库给替换了。 SGI STL:SGI公司的C++标准模版库。 STLport :SGI STL库的跨平台可移植版本。
C++准标准库Boost Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为 标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标 准委员会库工作组成员发起。 Boost库为我们带来了最新、最酷、最 实用的技术,是不折不扣的“准”标准库。
Regex:正则表达式库 Spirit:LL parser framework,用C++代码直接表达EBNF Graph:图组件和算法 Lambda:在调用的地方定义短小匿名的函数对象,很实用的functional功 能 concept check:检查泛型编程中的concept Mpl:用模板实现的元编程框架 Thread:可移植的C++多线程库 Python:把C++类和函数映射到Python之中 Pool:内存池管理 smart_ptr:5个智能指针,学习智能指针必读
C++第三方库——网路通讯 ACE C++库的代表,超重量级的网络通信开发框架。ACE自适配通信 环境(Adaptive Communication Environment)是可以自由使用、 开放源代码的面向对象框架,在其中实现了许多用于并发通信软 件的核心模式。ACE提供了一组丰富的可复用C++包装外观 (Wrapper Facade)和框架组件,可跨越多种平台完成通用的通 信软件任务,其中包括:事件多路分离和事件处理器分派、信号 处理、服务初始化、进程间通信、共享内存管理、消息路由、分 布式服务动态(重)配置、并发执行和同步
StreamModule 设计用于简化编写分布式程序的库。尝试着使得编写处理异步行 为的程序更容易,而不是用同步的外壳包起异步的本质。
SimpleSocket 这个类库让编写基于socket的客户/服务器程序更加容易
A Stream Socket API for C++ 又一个对Socket的封装库12
C++第三方库——GUI MFC 大名鼎鼎的微软基础类库(Microsoft Foundation Class)。它构建于Windows API 之上,能够使程序员的工作更容易,编程效率高,减少了大量在建立 Windows 程序时必须编写的代码,同时它还提供了所有一般 C++ 编程的优点。MFC 编写的 程序在各个版本的Windows操作系统上是可移植的。
QT 是Trolltech公司的一个多平台的C++图形用户界面应用程序框架。它提供给应用程 序开发者建立艺术级的图形用户界面所需的所用功能。是流行的Linux桌面环境 KDE 的基础,同时它还支持Windows、Macintosh、Unix/X11等多种平台。
WxWindows 跨平台的GUI库。其类层次极像MFC
Fox 开放源代码的GUI库
WTL 基于ATL的一个库。因为使用了大量ATL的轻量级手法,模板等技术,在代码尺寸, 以及速度优化方面做得非常到位。主要面向的使用群体是开发COM轻量级供网络 下载的可视化控件的开发者
GTK GTK是一个大名鼎鼎的C的开源GUI库。在Linux世界中有Gnome这样的杀手应用。 而Qt就是这个库的C++封装版本
结构体位段 C++定义结构体中,可以为其成员定义时指定所 占的位数(1个字节为8个位)struct Date { int year: int month: int day: };
20; 6; 6;
C++中的结构体支持类的所有特性 内存对齐14