资源描述
,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,9,章输入输出流,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,9,章输入输出流,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,9,章输入输出流,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,9,章输入输出流,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,9,章输入输出流,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,9,章输入输出流,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,面向对象程序设计,C+,面向对象程序设计,C+,C+,C,对,C,语言,功能的增强,增加了面对,对象的机制,程序设计方法,面对对象,程序设计,面向过程,程序设计,目录,1,2,3,4,面向对象程序设计概述,5,C+,基础知识,类和对象,继承与组合,多态性与虚函数,目录,6,7,8,9,面向对象的妥协,10,运算符重载,模板,输入输出流,异常处理,本课程学习目标,理解面向对象编程的基本思想,掌握面向对象编程的基本方法,掌握,C+,面向对象编程技术,学会利用,C+,语言进行一般面向对象程序的设计,解决一般应用问题,并为后续专业课程(,VC,、,Java,)的学习奠定程序设计基础。,学习方法,:,1.,抓好三个环节:,课前,、,课上,、,课后,2.,多编程、多上机:,课堂纪律:,面向对象程序设计,C+,第,1,章 面向对象程序设计概述,本章从一个小型的学生信息管理系统的面向,过程程序设计出发,讨论了传统的面向过程,程序设计方法的不足,进而引出面向对象程,序设计方法,介绍面向对象程序设计的编程,思想,面向对象程序设计的基本概念,面向,对象程序设计的优点。最后简单介绍面向对,象的软件开发。,本章内容简介,第,1,章 面向对象程序设计概述,本章学习目标,1.,了解传统的面向过程程序设计方法的不足,2.,理解面向对象程序设计的编程思想,3.,理解并掌握面向对象程序设计的基本概念,4.,领会面向对象程序设计的优点,5.,了解面向对象的软件开发过程,第,1,章 面向对象程序设计概述,面向过程程序设计的基本思想:,功能分解,、,逐步求精,、,模块化,、,结构化,。,1.1,面向过程程序设计,第,1,章 面向对象程序设计概述,【,例,1-1】,运用面向过程程序设计方法设计一个小型的学生信息管理系统。该系统要管理的学生信息包括:学号,(Num),、姓名,(Name),、性别,(Sex),、出生日期,(Birthday),、三门课成绩,英语,(English),、数据结构,(DataStructure),、,C+,程序设计,(CPlusPlus),、总成绩,(Sum),、平均成绩,(Average),,学生信息表如表,1-1,所示。,1.1,面向过程程序设计,第,1,章 面向对象程序设计概述,学号,姓名,性,别,出生,日期,英语,成绩,数据结,构成绩,C+,成绩,总成绩,平均成绩,20070202001,邓光辉,男,89-02-05,87,88,90,265,88.3,20070202002,杜丽丽,女,90-09-20,79,80,75,234,78.0,20070202003,姜志远,男,90-11-08,68,84,70,222,74.0,20070202004,张大伟,男,88-08-05,70,67,82,219,73.0,表,1-1,学生信息表,第,1,章 面向对象程序设计概述,该学生信息管理系统要具有如下功能,:,(,1,),显示学生信息,:显示全部学生的信息。,(,2,),查询学生信息,:按学号或姓名查询学生信息,,查询结果直接显示在屏幕上。,(,3,),添加学生信息,:对学生信息进行添加。,(,4,),修改学生信息,:按学号修改学生信息。,1.1,面向过程程序设计,第,1,章 面向对象程序设计概述,该学生信息管理系统要具有如下功能,:,(,5,),删除学生信息,:按学号删除学生信息。,(,6,),统计学生成绩,:统计每个学生的总成绩和平均成绩,或统计所有学生某一门课的总成绩和平均成绩。,(,7,),学生信息排序,:按学号、总成绩或某一门课成绩排序。,(,8,),备份学生信息,:把所有学生信息备份一份。,1.1,面向过程程序设计,实现该系统的,C,程序框架,/*,学生信息管理系统,C,语言源代码,student.c*/,#include,/*,包含输入,/,输出头文件*,/,#include,/*,包含字符串处理头文件*,/,typedef struct,/*,用于存放生日信息的结构体*,/,int year;,int month;,int day;,Date;,实现该系统的,C,程序框架,typedef struct,/*,用于存放学生信息的结构体*,/,char Num15;,char Name10;,char Sex;,float English;,/*,英语课成绩*,/,float DataStructure;,/*,数据结构课成绩*,/,float CPlusPlus;,/*C+,课成绩*,/,float Sum,Average;,/*,总成绩、平均成绩*,/,Student;,实现该系统的,C,程序框架,/*,用于存放读入内存中的所有学生信息的全局数组*,/,Student stud100;,int count=0;,/*,存放实际学生人数的全局变量*,/,/*,各自定义函数原型声明*,/,void ReadData();,/*,读取学生信息到全局数组,stud,中*,/,void Display();,/*,显示学生信息*,/,void Search();,/*,查询学生信息*,/,void SearchNum();,/*,按学号查询学生信息*,/,void SearchName();,/*,按姓名查询学生信息*,/,void BackupData();,/*,备份学生信息*,/,实现该系统的,C,程序框架,void main(),/*,系统功能以菜单的形式提供给用户*,/,char choice;,ReadData();,for(;),/*,显示系统功能菜单*,/,printf(*,学生信息管理系统*,n);,printf(*n);,printf(“*1,显示学生信息 *,n);,printf(*2,查询学生信息 *,n);,实现该系统的,C,程序框架,printf(*8,备份学生信息 *,n);,printf(“*0,退出系统 *,n);,printf(*n);,printf(,请选择要执行的操作,(0,8):_ n);,scanf(%c,switch(choice),case 1:Display();break;,case 2:Search();break;,case 0:return;,default:printf(,选择错误!请重新选择。,n);,/*switch,结束*,/,实现该系统的,C,程序框架,/*for,结束*,/,/*main,函数结束*,/,/*,各自定义函数实现代码*,/,void ReadData(),void Display(),void Search(),第,1,章 面向对象程序设计概述,从上述学生信息管理系统的C程序框架可以看出,运用面向过程程序设计方法所设计出来的程序,,数据和操作数据的函数是分离的。,所有数据都是公用的,一个函数可以使用任何一组数据,而一组数据又能被多个函数所使用。,用面向过程程序设计方法所设计出来的程序模型如图1-1所示。,1.1,面向过程程序设计,图,1-1,面向过程程序设计的程序模型,第,1,章 面向对象程序设计概述,面向过程的结构化程序设计在20世纪60年代末、70年代初从一定程度上缓解了当时的,“,软件危机”,它在处理较小规模的程序时比较有效。但是,随着人们对大规模软件需求的增长,面向过程的结构化程序设计逐渐显示出它的不足,具体表现在:,1.1,面向过程程序设计,第,1,章 面向对象程序设计概述,面向过程的结构化程序设计的不足,:,1程序设计困难,生产率低下,2,数据不安全,3,程序修改困难,4,代码重用程度低,1.1,面向过程程序设计,第,1,章 面向对象程序设计概述,图,1-1,面向过程程序设计的程序模型,图,1-2,面向对象程序设计的程序模型,第,1,章 面向对象程序设计概述,要使某一个对象实现某一个行为,应当向它传递相应的消息。,数据,成员函数,成员函数,数据,成员函数,成员函数,数据,成员函数,成员函数,对象,对象,对象,消息,消息,消息,第,1,章 面向对象程序设计概述,在面向过程的结构化程序设计中,人们常使用这样的公式来表述程序:,程序,=,算法,+,数据结构,而面向对象程序设计则把算法和数据结构封装在对象中。在面向对象程序设计,我们可以这样来表述程序:,程序,=,(对象,+,对象,+,对象,+,),+,消息,或,程序,=,对象,s+,消息,对象,=,算法,+,数据结构,图,1-2,面向对象程序设计的程序模型,第,1,章 面向对象程序设计概述,数据,函数,函数,数据,函数,函数,数据,函数,函数,对象,对象,对象,消息,消息,消息,属性,行为,行为,实体,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,1对象,可以,从两个角度,来理解,对象,。一个角度是现实世界,另一个角度是我们所建立的软件系统。,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,1对象,现实世界中客观存在的任何一个事物都可以看成一个对象(object)。或者说,现实世界是由千千万万个对象组成的。,对象可以是有形的,,如汽车、房屋、张三等,,也可以是无形的,,如社会生活中的一种逻辑结构:学校、军队,甚至一篇文章、一个图形、一项计划等都可视作对象。,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,1对象,对象可大可小,。例如学校是一个对象,一个班级也是一个对象,一个学生也是一个对象。同样,军队中的一个师,一个团,一个连,一个班都是对象。,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,1对象,任何一个对象都具有两个要素:属性和行为,属性:,用于描述客观事物的静态特征,行为:,用于描述事物的动态特征。,例如,一个人是一个对象,他有姓名、性别、身高、体重等属性,有走路、讲话、打手势、学习和工作等行为。,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,1对象,在一个系统中的多个对象之间通过一定的渠道相互联系,如图1-2所示。,图,1-2,面向对象程序设计的程序模型,第,1,章 面向对象程序设计概述,要使某一个对象实现某一个行为,应当向它传递相应的消息。,数据,成员函数,成员函数,数据,成员函数,成员函数,数据,成员函数,成员函数,对象,对象,对象,消息,消息,消息,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,1对象,在面向对象的软件,分析,系统中,,对象是用来描述客观事物的一个相对独立体,是构成系统的一个基本单位。,一个对象由一组属性,和对这组属性进行操纵的,一组操作,组成。,属性,是用来描述对象静态特征的一个数据项,,操作,是用来描述对象行为的一个动作序列。,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,1对象,在开发软件系统时,首先要对现实世界中的对象进行分析和归纳,以此为基础来定义软件系统中的对象。,软件系统中的一部分对象是对现实世界中的对象的抽象,但其内容不是全盘照搬,这些对象只包含与所解决的现实问题有关的那些内容;系统中的另一部分对象是为了构建系统而设立的。,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,2,类,类是对客观世界中具有相同属性和行为的一组对象的抽象,它为属于该类的全部对象提供了统一的抽象描述,其内容包括属性和操作。,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,2,类,在寻找类时,要用到一个概念:,抽象,。,所谓抽象,,是指忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,把具有共性的事物划分为一类,得出一个抽象的概念。例如,人可以作为一个类,它是世界上所有实体人如张三、李四、王五等的抽象,而实体人张三、李四、王五等则是人这个类的具体实例。,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,2,类,类和对象的关系可表述为:,类是对象的抽象,而对象则是类的实例,或者说是类的具体表现形式。,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,3,封装,在面向对象方法中,,所谓“封装”,,,指两方面的含义:一是,用对象把属性和操纵这些属性的操作包装起来,形成一个基本单位,各个对象之间相对独立,互不干扰。,二是,将对象中某些部分对外隐蔽,即隐藏其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为信息隐蔽,(information hiding),。,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,4,继承,所谓“继承”,,是指特殊类自动地拥有或隐含地复制其一般类的全部属性与操作。,继承具有,“,是一种,”,的含义。,汽车,卡车,轿车,图,1-3,继承示例,一般类(也称为基类、父类),特殊类(也称为派生类、子类),第,1,章 面向对象程序设计概述,图,1-4,继承的层次与抽象原则的运用,汽车,卡车,轿车,火车,车辆,轮船,飞机,运输工具,较多地忽,略事物之,间的差别,得到较一,般的类,较多地注,意事物之,间的差别,得到较特,殊的类,第,1,章 面向对象程序设计概述,有时一个类要同时继承两个或两个以上一般类中的属性和操作,把这种,允许一个特殊类具有一个以上一般类的继承模式称作多继承,。,图,1-5,多重继承示例,销售经理,管理人员,兼职技术人员,销售人员,雇员,第,1,章 面向对象程序设计概述,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,5,消息,在面向对象方法中,把,向对象发出的操作请求称为,消息,(message)。,对象之间通过消息进行通信,实现了对象之间的动态联系。至于消息的具体用途,它们有很多种,例如,读取或设置对象本身的某个(些)属性的值,请求其他对象的操作。,在C+中,消息其实就是函数调用。,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,6,关联,关联(association)是两个或多个类之间的一种静态关系。,教师,指导毕业论文,学生,1,图,1-6,关联示例,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,7,组合,组合描述的是类与类之间的整体与部分的关系。,例如,汽车与发动机之间的关系,计算机与主板间的关系。,组合是具有“整体部分”关系语义的关联,也就是说,组合是关联的一种,只是它还具有明显的“整体部分”含义。,第,1,章 面向对象程序设计概述,1.2.2,面向对象的基本概念,8,多态性,如果有几个相似而不完全相同的对象,有时人们要求在向它们发出同一个消息时,它们的反应各不相同,分别执行不同的操作,这种情况就是多态现象。,在面向对象方法中,所谓,多态性,(polymorphism),是指由继承而产生的相关而不同的类,其对象对同一消息会作出不同的响应。多态性是面向对象程序设计的一个重要特征,使用它能增加程序的灵活性。,第,1,章 面向对象程序设计概述,1.2.1,面向对象的编程思想,具体地讲,面向对象编程的基本思想如下:,1.,客观世界中的事物都是对象(,object,),对象之间存在一定的关系。,2,用对象的属性(,attribute,)描述事物的静态特征,用对象的操作(,operation,)描述事物的行为(动态特征)。,1.2,面向对象程序设计,第,1,章 面向对象程序设计概述,1.2.1,面向对象的编程思想,3,对象的属性和操作结合为一体,形成一个相对独立、不可分的实体。对象对外屏蔽其内部细节,只留下少量接口,以便与外界联系。,4,通过抽象对对象进行分类,把具有相同属性和相同操作的对象归为一类,类是这些对象的抽象描述,每个对象是其所属类的一个实例。,第,1,章 面向对象程序设计概述,1.2.1,面向对象的编程思想,5,复杂的对象可以用简单的对象作为其构成部分。,6,通过在不同程度上运用抽象的原则,可以得到一般类和特殊类。特殊类继承一般类的属性与操作,从而简化系统的构造过程。,7,对象之间通过传递消息进行通信,以实现对象之间的动态联系。,8,通过关联表达类之间的静态关系。,第,1,章 面向对象程序设计概述,1.2.3,面向对象程序设计的优点,1,从认识论的角度看,面向对象程序设计改变了软件开发的方式,面向对象程序设计强调从对象出发认识问题域,对象对应着问题域中的事物,其属性和操作分别刻画了事物的静态特征和动态行为,对象之间的继承、组合、关联和依赖关系如实地表达了问题域中事物实际存在的各种关系。,第,1,章 面向对象程序设计概述,1.2.3,面向对象程序设计的优点,因此,无论是软件系统的构成成分,还是通过这些成分之间的关系而体现的软件系统结构,都可直接地映射到问题域。软件开发人员能够利用人类认识事物所采用的一般思维方式来进行软件开发。,第,1,章 面向对象程序设计概述,1.2.3,面向对象程序设计的优点,2,面向对象程序中的数据的安全性高,面向对象程序中的数据及对数据的操作捆绑在一起,被封装在不同的对象中。对象对外隐蔽其内部细节,只留下少量的接口,以便与外界联系。外界只能通过对象提供的对外接口操作对象中的数据,这可以有效保护数据的安全。,第,1,章 面向对象程序设计概述,1.2.3,面向对象程序设计的优点,3,面向对象程序设计有助于软件的维护与复用,某类对象数据结构的改变只会引起该类对象操作代码的改变,只要其对外提供的接口不发生变化,程序的其余部分就不需要做任何改动,从而把程序代码的修改维护局限在一个很小的范围内。这就对用户需求的变化有较强的适应性。,第,1,章 面向对象程序设计概述,1.2.3,面向对象程序设计的优点,3,面向对象程序设计有助于软件的维护与复用,面向对象程序设计中类的继承机制有效解决了代码复用的问题。在设计新类时,可通过继承引用已有类的属性和操作,并可在已有类的基础上增加新的数据结构和操作,延伸和扩充已有类的功能,这种延伸和扩充一点不影响原有类的使用。人们可以像使用集成电路(,IC,)构造计算机硬件那样,比较方便地重用对象类来构造软件系统。,第,1,章 面向对象程序设计概述,面向对象的软件工程包括以下几个阶段:,1面向对象分析(object oriented analysis,OOA),2面向对象设计(object oriented design,OOD),3面向对象编程(object oriented programming,OOP),4,面向对象测试(,object oriented test,OOT,),5,面向对象维护(,object oriented soft,maintenance,OOSM,),1.3,面向对象的软件开发,第,1,章 面向对象程序设计概述,1面向对象分析,对系统进行面向对象分析,识别出系统中的对象,定义对象的属性和操作,并抽象出对象类。,1.4,学生信息管理系统的面向对象分析与设计,第,1,章 面向对象程序设计概述,(1),学生对象与学生类,考虑问题域,识别系统中的对象与类。,该系统是一个学生信息管理系统,每一个被管理的学生都是该系统中的一个对象,所有学生对象都具有相同的属性:学号、姓名、性别、出生日期、英语成绩、数据结构成绩、,C+,程序设计成绩、总成绩、平均成绩,相同的操作:计算总成绩、计算平均成绩。对所有学生对象的抽象,形成一个学生类。,第,1,章 面向对象程序设计概述,+,计算总成绩,+,计算平均成绩,-,学号,-,姓名,-,-,平均成绩,学生类,+,显示学生信息,+,按学号查询学生信息,+,按姓名查询学生信息,+,打开文件,+,写文件,+,新建文件,“顺序表”容器类,1,-,学生数组,-,学生总人数,图,1-8,学生信息管理系统的类图,第,1,章 面向对象程序设计概述,(,2,),顺序表对象与顺序表类,考虑系统责任,把系统责任所要求的每一项功能都落实到某个或某些对象上。该系统要实现对所有需要管理的学生对象信息的输入(从键盘输入)、输出(输出到屏幕)、存储(存储到外存)、读取(从外存读取)、增加、删除、修改、查询、排序、统计等操作。假定学生对象信息在外存中以文件的形式存放,在内存中以顺序表的形式存放。我们把顺序表看作系统中的一个对象,并形象地称它为“容器”。,第,1,章 面向对象程序设计概述,(,2,),顺序表对象与顺序表类,顺序表对象作为用来存储学生对象的容器,其数据结构可以选择最简单的数组,因此,顺序表对象应该具有的属性:以学生对象为元素的对象数组、学生总人数。,第,1,章 面向对象程序设计概述,(,2,),顺序表对象与顺序表类,要对学生信息进行管理,实现系统功能,顺序表对象需要设计较丰富的操作,可以想到的有:显示全部学生信息、按学号查询学生信息、按姓名查询学生信息、添加学生信息、修改学生信息、删除学生信息、统计每个学生的总成绩和平均成绩、统计某一门课的总成绩和平均成绩、学生信息排序、打开文件读取数据、将顺序表中的数据写入文件、新建文件等。,对顺序表对象的抽象形成一个顺序表类。,第,1,章 面向对象程序设计概述,2,面向对象,设计,根据面向对象分析的结果,主要解决与实现有关的问题。,首先,我们把分析阶段所抽象出来的类,按实现条件进行补充和调整。,1.4,学生信息管理系统的面向对象分析与设计,第,1,章 面向对象程序设计概述,2,面向对象,设计,假如我们选择C+作为该系统的编程语言,由于C+没有提供日期数据类型,所以每个学生的出生日期看作一个日期对象,所有日期对象具有相同的属性:年、月、日,相同的操作:设置日期、显示日期、获取年份、获取月份、获取日期。对所有日期对象的抽象,形成一个日期类。该类与学生类的关系为组合关系。,1.4,学生信息管理系统的面向对象分析与设计,第,1,章 面向对象程序设计概述,2,面向对象,设计,对于学生类,增加描述类对象自身行为的操作:初始化属性值、设置属性值(设置属性学号、姓名、性别、出生日期、英语成绩、数据结构成绩、C+程序设计成绩的值)、显示属性值(显示所有属性的值)、获取学号、获取姓名、获取英语成绩、获取数据结构成绩、获取C+成绩、获取总成绩、获取平均成绩。,1.4,学生信息管理系统的面向对象分析与设计,第,1,章 面向对象程序设计概述,2,面向对象,设计,对于人机界面的设计,由于我们不借助于可视化编程环境(Visial C+)的支持,我们需要设计一个主菜单类,负责系统功能主菜单的显示。每项系统子功能设计一个子菜单类,负责系统子功能菜单的显示与实现。主菜单类与子菜单类是继承关系,这样可以在类间使用多态性机制,从而创建一个易于扩展的系统。,1.4,学生信息管理系统的面向对象分析与设计,Thank You!,第,2,章,C+,基础知识,C+,程序设计,第,2,章,C+,基础知识,本章学习要点,从,C,语言到,C+,的发展历程,简单的,C+,程序,C+,对,C,的扩充,C+,的输入输出、数据类型、函数及指针,C+,的常变量、引用、名字空间、字符串变量,C+,程序的编写和实现,第,2,章,C+,基础知识,本章学习目标,了解从,C,语言到,C+,的发展历程,对简单的,C+,程序有整体的感性认识,掌握,C+,对,C,的扩充,掌握,C+,的输入输出、数据类型、函数及指针,掌握,C+,的常变量、引用、名字空间、字符串变量,熟悉,C+,程序的编写和实现流程,2.1,从,C,语言到,C+,C,语言到,C+,的发展历程,C+3.0,C+2.0,C+1.0,带类的,C,C,C+4.0,ANSI C+,89,年,增加类的多继承,91,年,增加模板,增加异常处理、名字空间、运行时类型识别,97,年,美国,C+,标准正式发布,2.2,简单,C+,程序,下面看几个简单的,C+,程序,【,例,2-1】,在屏幕上输出一行字符“,Hello C+!”,。,#include,/,包含头文件命令,using namespace std;,/,使用名字空间,std,int main(),coutHello C+!endl;,/,输出字符串到屏幕,return 0;,/main,函数返回,0,至操作系统,标准C+程序和C程序的不同:,main函数的返回值为整型 ,注释符:,/,使用cout输出 ,包含头文件,iostream,名字空间,注意,【,例,2-2】,通过函数求两个整数,a,和,b,的和。,#include,/,包含头文件命令,using namespace std;,/,使用名字空间,std,int sum(int x,int y)return x+y;,/,求和函数,int main(),int a,b;,/,定义两个变量,a,和,b,coutInput to a and b:ab;,/,等待用户从键盘输入数据,couta+b=sum(a,b)endl;,return 0;,2.2,简单,C+,程序,C+,的函数和,C,语言的函数非常相似,函数的使用仍然需要先声明后使用。如果函数定义在函数调用之后,则必须在前面声明函数原型,注意,#include,/,包含头文件命令,using namespace std;,/,使用名字空间,std,int main(),int a,b;,/,定义两个变量,a,和,b,coutInput to a and b:ab;,/,等待用户从键盘输入数据,int sum(int x,int y);,/sum,函数原型声明,couta+b=sum(a,b)endl;,return 0;,int sum(int x,int y)return x+y;,/,求和函数,2.2,简单,C+,程序,变量可以在程序的任何地方定义,但要在使用前,2.2,简单,C+,程序,【,例,2-3,】,声明一个关于人的类,Person,,人的信息包括姓名、性别、年龄,程序运行后,我们可以输入自己的信息,也可以显示自己的信息。,#include,/,包含头文件命令,using namespace std;,/,使用名字空间,std,class Person int main(),;return 0;,2.2,简单,C+,程序,class Person,/,类的声明,public:,/,以下为类的公用成员函数,void SetInfo(),/,公用成员函数,SetInfo,coutnamesexage;,void Show(),/,公用成员函数,Show,cout name:name;,cout sex:sex;,cout age:ageendl;,private:,/,以下为类的私有数据成员,char name20;,/,私有数据成员,name,char sex2;,/,私有数据成员,sex,int age;,/,私有数据成员,age,;,/,类声明结束,此处必须有分号,2.2,简单,C+,程序,int main(),/main函数,/,定义,Person,类的两个对象,person1,,,person2,Person person1,person2;,person1.SetInfo();,/对象person1信息输入,person2.SetInfo();,/对象person2信息输入,person1.Show();,/对象person1信息输出,person2.Show();,/对象person2信息输出,return 0;,注意:,类的,声明和对象的定义的语法形式。,类中的成员分为数据成员和成员函数,成员的可见性分为,3,种:,公用,、,私有,、,受保护,。,类的概念的理解:,类是一种用户自定义数据类型,,它是不占用实际存储空间的。,对象的理解:,对象是类类型的变量,,系统会为对象分配内存空间。,2.2,简单,C+,程序,2.3 C+,对,C,的扩充,在输入输出方面的扩充,对数据类型的扩充,常变量,在指针方面的扩充,引用的概念,在函数方面的扩充,名字空间的概念,字符串变量,本章重点,2.3.1,C+的输入输出,C,语言输入输出的实现,通过输入输出库函数实现,C,语言的输入输出存在着格式复杂、无法保证安全性、无法对自定义类型整体输入输出等缺点,C+,对,C,输入输出的扩充,C+,的输入,/,输出(,I/O,)流类库,“,流”的思想,cout,、,cin,对象,运算符,2.3.2,数据类型的扩展,2.3.3,用,const,定义常变量,直接常量和符号常量,使用符号常量需要注意的问题:,运行时不分配内存单元,符号常量没有类型,在编译时不进行类型检查,注意替换后的表达式和预想的表达式是否一致,int x=1,y=2;,#define PI 3.14159,#define R x+y,coutPI*R*Rendl;,输出语句输出的并不是,3.14159*(x+y)*(x+y),,,而是,3.14159*x+y*x+y,。,2.3.3,用,const,定义常变量,为了使常量也能像变量那样进行类型检查,,C+,提供了用,const,定义常变量的方法,定义常变量的语法:,const float PI=3.14159;,注意:,常变量要在定义的同时进行初始化,,可以是具体的数值,也可以是表达式。,【,例,2-4】,利用常变量计算圆的面积。,#include,using namespace std;,int main(),const,float PI=3.14;,/定义常变量,float radius=0;,coutradius;,coutThe area of circle is:PI*radius*radiusendl;,return 0;,2.2,简单,C+,程序,注意,const,的位置,一般见到的,const,的位置可能在类型的前面,但是,const,也可以在变量名前面,并且两者的含义完全相同。,注意,float,const,PI=3.14;,/定义常变量,2.3.4,指针,指针,指针是一个重要概念,如果使用得当可以使程序高效、简洁、紧凑。如果对指针掌握不牢固,编程则会出现意想不到的错误,指针是内存单元的地址,经常所讲的指针是指针变量的简称,是用来存放指针(地址)的变量。,本节重点讨论,C+,中使用指针需要注意的地方,2.3.4.1,指针与,0,空指针,空指针表示“未分配”或者“尚未指向任何地方”的指针,空指针一般用来判断内存分配是否成功,注意:“空指针”与“野指针”的区别,在指针上下文中的常数,0,被编译成空指针,程序员更常使用符号常量,NULL,来表示空指针,未初始化的指针,【例2-5】指针与0。,#include,using namespace std;,int main(),int*p=0;,/定义空指针p,int*q;,/定义野指针q,int x=100;,/定义整型变量x并初始化为100,/*p=50;,/若执行则编译出错,不能使用空指针,*q=50;,/编译通过,但不知把50写到何处,p=q=,/使指针p和q都指向变量x,if(p!=0),/判断指针p是否为空指针,cout*p *qendl;,/输出变量x的值,return 0;,2.2,简单,C+,程序,int *p=NULL,2.3.4.2,指针与,const,int *p=NULL,const,int *p=NULL,int,const,*p=NULL,指向,const,变量的指针,int*,const,p=NULL,const,指针,2.3.4.2,指针与,const,【,例,2-6】,指向,const,变量的指针。,include,using namespace std;,int main(),const int*p=NULL;,/,定义指向,const,变量的指针,p,const int a=10;,/,定义常变量,a,p=,/,指针,p,指向,a,cout*p=*pendl;,/,输出,p,所指向单元的内容,int b=100;,/,定义普通变量,b,p=,/,指针,p,指向,b,cout*p=*pendl;,/,输出,p,所指向单元的内容,/*p=200;,/,错误,不能通过,p,修改,p,所指向单元内容,b=200;,cout*p=*pendl;,/
展开阅读全文