1、c+语言程序设计 The C+ Programming Language 天津师范大学计算机与信息工程学院姜 丽 芬,教 材 及 参 考 书 目,C+语言基础教程吕凤翥著清华大学出版社2001年4月面向对象程序设计刘振安 主编经济科学出版社 2000年3月C+ 程序设计钱能 清华大学出版社 2001年11月C+程序设计北京航空航天大学出版社,麦中凡编。 面向对象的程序设计与C+教程张国峰编著,电子工业出版社。The C+ Programming英文版,计算机自印。最新C+语言精华(第二版) 美Herbert Schildt著,杨长虹等译。电子工业出版社,面向对象程序设计,第1章 C+语言概述
2、第2章 数据类型和表达式 第3章 预处理和语句 第4章 函数和作用域 第5章 类和对象(一) 第6章 类和对象(二) 第7章 继承性和派生类 第8章 多态性和虚函数 第9章 C+的I/O流库 第10章 模板,第1章 C+语言概述,C+产生的背景C+思想的提出是基于70年代发明的C语言,而C语言是在B语言的基础上发展起来的。 1970年美国贝尔(Bell)实验室的K.Thompson以BCPL语言为基础,设计了一种类似于BCPL的语言,取其第一字母B,称为B语言。 1972年美国贝尔实验室的Dennis M.Ritchie为克服B语言的诸多不足,在B语言的基础上重新设计了一种语言,取其第二字母C
3、,故称为C语言。,第1章 C+语言概述,C+产生的背景(续) C语言凭借其灵活性和高效性,自80年代以来在程序设计界占领了广泛的市场,程序员用它开发了许多重要产品。 但是C语言并不是万能的,随着软件工程规模的扩大,C语言的缺陷逐渐显露出来。比如说,程序量超过50,000行,开发人员达到数十个时,系统维护的工作量就变得相当大,而且系统的整体性也难以保证。 1980年贝尔实验室的Bjarne Stroustrup对C语言进行了扩充,推出了“C with class”,1982年,正式命名为C+。,C+与C语言的本质差别及兼容,本质差别: 编程方法方面: C+对C的兼容是建立在发展和完善的基础上的,
4、即C+是面向对象的程序设计语言; C语言是面向过程的程序设计语言。 程序结构方面: C的程序结构采用“数据+算法”模式。 C+语言程序的结构采用“对象+消息”模式; 兼容性: 主要体现在源代码的支持,大量C语言的程序稍微加以修改或不修改就可以在C+中编译通过并支持C语言的库函数和语法规则。 对系统库的支持。 保持C的简洁、高效和接近汇编语言等特性。 改良:改进了C中一些易产生错误的语法现象(后文介绍)。,C+对C语言的扩充,第1章 C+语言概述,C+与C语言的本质差别及兼容性,C+改进了C的不足,适合大型复杂程序的开发和维护,支持面向对象的程序设计。在改进的同时保持了C的简洁性和高效性。 C+
5、主要的特点:面向对象的程序设计方法的语言。 应用场合:适应大型复杂程序开发与维护,非面向对象特征对C中一些不良特征 进行了改进,消除了C中的不安全 因素。因此C+是一个更好的C,C,面向对象特征,第1章 C+语言概述,OOP(Object Oriented Programming)面向对象的程序设计方法是目前的主流方法。C+是在C语言的基础上产生又保持了与C相兼容,因而C+既支持面向对象的程序设计方法,也支持面向过程的程序设计方法。,第1章 C+语言概述,面向过程的程序设计方法 机制:将解决问题的重点放在如何实现的细节过程方面,将数据与操作这些数据的函数分开,围绕功能实现操作流程来设计程序。
6、特点:自顶向下,逐步求精功能的分解。 程序形式-主模块+子模块,它们之间以数据作为连接。 程序=算法+数据结构 每个模块可以对立编译,为多人开发奠定了基础。,面向过程的程序设计方法,应用实例:计算两数之和 功能分解:( 1 ) 提示输入第一个数(2)提示输入第一个数(3)计算两数之和(4)显示出总和,面向过程的程序设计方法,#include void main(void) int x,y,sumscanf(“%d%d”, ,面向过程的程序设计方法,缺点: (1)数据与操作这些数据的代码(函数)分离,一旦数据改变(如整数实数)则需要重新编写函数,程序功能扩充时,需要大量修改函数。以函数方式实现代
7、码重用,效率低,是手工作坊式的编程。 (2)“数据”和过程分离,以过程为中心,数据的一致性很难保证。例如:y1=a+f(x) y2=f(x)+a若f(x)含有对a的操作,则y1与y2不同,顺序的不同可能造成结果不同,很不自然。 (3)C语言的最大的缺点是不支持代码重用的机制,某个模块只能在某个环境中起作用。 应用场合:中小型程序设计及应用,第1章 C+语言概述,面向对象的程序设计方法 机制:它是一种解决问题的方法或观点,它认为自然界是由一组彼此相关并能相互通信的实体(对象)所组成。 面向对象的程序设计方法(OOP):它是用面向对象的观点来描述现实问题,然后用计算机语言来模仿并处理该问题的一种程
8、序设计方法。 要求:描述或处理问题时应具有高度的概括,分类并对它抽象的能力,准确地描述某一实体。 目的:实现软件设计的工业化,变手工作坊式的编程为软件构件式工业化,达到快速高效编程。 OOP程序设计缺点:程序代码较庞大,面向特定的操作平台。Java:由Sun公司于1995年发布,使用于internet网络开发和应用的纯OOP语言。Java特点:与特定操作平台无关(write once run anywhere),面向对象的程序设计方法,应用实例:计算两数之和 流程: (1)定义一个“加”类描述出各种类型数相加的操作。 (2)定义出一个对象(代表本次计算)并对它赋值。 (3)产生消息-将两个数相
9、加 (4)产生消息-显示总和值,#include “iostream.h“ class AddClass public: void Add(int x,int y) sum=x+y; void Add(float x,float y)sumf=x+y;void printSum(int flag)cout“Total Sum=“sumendl;void printSum(float flag)cout“Total Sum2=“sumfendl; private: int sum; float sumf; ;,void main(void)AddClass addobj;/定义出对象addobj
10、.Add(1,2);/产生二数相加消息addobj.Add(3.4f,4.5f);addobj.printSum(1);/产生显示总和消息addobj.printSum(1.0f);,面向对象的程序设计机制(特征),四个特征:抽象、封装、继承与派生、多态性 (1)抽象:对具体对象(问题)进行概括、抽象并依照对象的公共性质加以概述的过程。 应用要点:1)先注意问题的本质及描述,其次是实现过程或细节。它直接决定程序的优劣。2)所涉及到的主要内容:数据抽象-描述对象的属性或状态(对象相互区别的物理量)代码抽象-描述某类对象的共同行为特征或具有的功能。3)如何实现抽象:通过类的定义这一机制来达到。,举
11、例,窗口这一类对象,数据抽象 代码抽象,钟表这一类对象,数据抽象-int Hour,int Minute,int Second 代码抽象-SetTime(),ShowTime(),人这一类对象,数据抽象-char* 姓名,char* 性别,int年龄,int 身份证号 代码抽象-GetCloth( ),EatFood( ),GoHome( ),Step( ),或: 代码抽象-AddPerson(),DeletePerson()PrintData(),Change() (社会属性角色),要点:对同一问题可以有不同的抽象结果,这取决于程序员看问题的角度。,-Open Windows( ),Clos
12、eWindows(),MoveWindwos(),ChangeWindows(),-int TopX,TopY,DownX,DownY,Color,面向对象的程序设计机制(特征),四个特征:抽象、封装、继承与派生、多态性(续) (2)封装:提供将所抽象出的类的数据成员、代码成员相组合的一种机制,它能将这二类成员组合在一起,形成对象(或实体)。 应用要点:1)目的:将使用者没有必要知道的内容隐藏起来(如录音机),增强使用的安全性,使用者不必了解具体的实现细节,而只需要通过设计者提供的外部接口来操作它。2)优点:实行高度模块化,从而产生软件构件(控件)3)特点: 有一个特定的边界-所有内部变化都限
13、制在此边界内 有外部接口-此对象利用它与其它对象发生关联 有特定的访问权限-在对象外部不能访问或修改受保护的内部实现细节。,面向对象的程序设计机制(特征),4)如何实现封装:采用C+中类定义来达到(软件外壳) 例:class Watch public:void SetTime(int NewH,int NewM,int NewS);void ShowTime();private:int Hour,Minute,Second; ,特定的边界,外部接口,特定的访问权限,面向对象的程序设计机制(特征),四个特征:抽象、封装、继承与派生、多态性(续) (3)继承与派生:它是C+中支持层次分类的一种机制
14、,允许程序员在保持原有类的特性基础上进行更具体的类的定义。 应用要点:1)可行性:因为现实世界中的各个对象并不是孤立的,而是相互关联的,因而为继承提供了可行性。2)目的:通过继承可以达到对现有系统(程序)的重用并且还能扩充和改进现有系统。3)常见形式:单一继承和多重继承。4)实现途径:通过定义出派生类来达到。例:鱼类,面向对象的程序设计机制(特征),四个特征:抽象、封装、继承与派生、多态性(续) (4)多态性:同一名称不同的功能实现方式。 应用要点:1)常见形式:静态多态性和动态多态性。2)目的:达到行为标识统一,减少程序的标识符的个数。3)实现途径:通过重载函数和虚函数来实现。允许有同名函数
15、、增加灵活性。,C+源程序的结构,一、面向过程的源程序结构,#include void main() cout“ This is my first C+ program.n “endl; ,二、C+程序的组成,预处理命令,输入输出,函数,语句,变量,其他,I/O流库,提供所 有的输入输出操作,cout:流类对象 :提取符 例如: cin“Please input two integers:“; cinab;endl:换行;,C+源程序的结构,要点: 1)标准输入输出包含文件由stdio.h改为iostream.h 2)新的I/O操作改为:printf()-coutcin变量名 参考P10例1.
16、1 输出:cout变量1变量2或:cin变量变量,C+源程序的结构,()注释由/* */ 改为 /单行如需要多行注释,仍使用* */方法 ()中提供许多操作算子,其中endl功能等效于C语言中的“n”。 (5)文件的扩展名由C语言中的*.c变为*.cpp(c plus plus). (6)分程序说明:C语言中,变量的定义必须在可执行程序前,C+中只要使用之前进行说明即可。 例如: int a,b=2;a=5;int c;/*变量声明,在C语言中,只能放在可执行语句的前面,但是,在C+中放在使用前说明即可。参考p13-例1.2,1.3*/,C+源程序的结构,()注释由/* */ 改为 /单行如需
17、要多行注释,仍使用* */方法 ()中提供许多操作算子,其中endl功能等效于C语言中的“n”。 (5)文件的扩展名由C语言中的*.c变为*.cpp(c plus lus). (6)分程序说明:C语言中,变量的定义必须在可执行程序前,C+中只要使用之前进行说明即可。 例如: int a,b=2;a=5;int c;/*变量声明,在C语言中,只能放在可执行语句的前面,但是,在C+中放在使用前说明即可。参考p13-例1.2,1.3*/,1. C+语言程序实现的三步曲 (1) 编辑 (2) 编译(预处理、编译、连接) (3) 运行 2. Visual C+ 6.0版本实现C+程序的功能 (1) 单文件程序的实现方法 以例1. 4为例。 (2) 多文件程序的实现方法 以例1.5为例。,C+程序的实现,