C++程序设计讲解_第1页
C++程序设计讲解_第2页
C++程序设计讲解_第3页
C++程序设计讲解_第4页
C++程序设计讲解_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++程序设计

主讲:朱淑芹

e-mail:shuqinzhu2008@163.com

tel考文献[1]

《C++程序设计》,谭浩强著,清华大学出版社,2004年[2]《C++程序设计》,钱能著,清华大学出版社,2000年[3]《C++Prime》(第三版),StanleyBLippman著,潘爱民译,中国电力出版社[4]《EffectiveC++》,ScottMeyers著,Lostmouse译

第1章面向对象程序设计概述本章从一个小型的学生信息管理系统的面向过程程序设计出发,讨论了传统的面向过程程序设计方法的不足,进而引出面向对象程序设计方法,介绍面向对象程序设计的编程思想,面向对象程序设计的基本概念,面向对象程序设计的优点。最后简单介绍面向对象的软件开发。本章内容简介第1章面向对象程序设计本章学习目标1.了解传统的面向过程程序设计方法的不足2.掌握面向对象程序设计的编程思想3.理解并掌握面向对象程序设计的基本概念4.领会面向对象程序设计的优点5.了解面向对象的软件开发工程C++的语言组成根据EffectiveC++第三版第一条款的描述,现在C++由以下四个“子语言”组成:1、C子语言。2、面向对象的C++。3、泛型编程语言。4、STL(C++标准模板库)。随着STL的不断发展,它已经逐渐成为C++程序设计中不可或缺的部分,其效率可能比一般的naive代码低些,但是其安全性与规范性使它大受欢迎。1.1面向过程程序设计面向过程程序设计的基本思想功能分解逐步求精模块化结构化【例1-1】运用面向过程程序设计方法设计一个小型的学生信息管理系统。该系统要管理的学生信息包括:学号(Num)、姓名(Name)、性别(Sex)、出生日期(Birthday)、三门课成绩﹝英语(English)、数据结构(DataStructure)、C++程序设计(CPlusPlus)

﹞、总成绩(Sum)、平均成绩(Average),学生信息表如表1-1所示。1.1面向过程程序设计学号姓名性别出生日期英语成绩数据结构成绩C++成绩总成绩平均成绩20070202001邓光辉男89-02-0587889026588.320070202002杜丽丽女90-09-2079807523478.020070202003姜志远男90-11-0868847022274.020070202004张大伟男88-08-0570678221973.0………………………表1-1学生信息表

1.1面向过程程序设计该学生信息管理系统要具有如下功能:(1)显示学生信息:显示全部学生的信息。(2)查询学生信息:按学号或姓名查询学生信息,查询结果直接显示在屏幕上。(3)添加学生信息:对学生信息进行添加。(4)修改学生信息:按学号修改学生信息。1.1面向过程程序设计该学生信息管理系统要具有如下功能:(续)(5)删除学生信息:按学号删除学生信息。(6)统计学生成绩:统计每个学生的总成绩和平均成绩,或统计所有学生某一门课的总成绩和平均成绩。(7)学生信息排序:按学号、总成绩或某一门课成绩排序。(8)备份学生信息:把所有学生信息备份一份。1.1面向过程程序设计实现该系统的C程序框架/*学生信息管理系统C语言源代码student.c*/#include<stdio.h>/*包含输入/输出头文件*/#include<string.h>/*包含字符串处理头文件*/typedef

struct{/*用于存放生日信息的结构体*/

intyear;

intmonth;

intday;}Date;实现该系统的C程序框架(续)typedef

struct{/*用于存放学生信息的结构体*/charNum[15];charName[10];charSex;floatEnglish;/*英语课成绩*/floatDataStructure;/*数据结构课成绩*/floatCPlusPlus;/*C++课成绩*/floatSum,Average;/*总成绩、平均成绩*/}Student;

实现该系统的C程序框架(续)/*用于存放读入内存中的所有学生信息的全局数组*/Studentstud[100];intcount=0;

/*存放实际学生人数的全局变量*/

/*各自定义函数原型声明*/voidReadData();/*读取学生信息到全局数组stud中*/voidDisplay();/*显示学生信息*/voidSearch();/*查询学生信息*/voidSearchNum();/*按学号查询学生信息*/voidSearchName();/*按姓名查询学生信息*/…voidBackupData();/*备份学生信息*/实现该系统的C程序框架(续)voidmain(){/*系统功能以菜单的形式提供给用户*/charchoice;

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",&choice);switch(choice){case'1':Display();break;case'2':Search();break;…case'0':return;default:printf("选择错误!请重新选择。\n");}/*switch结束*/实现该系统的C程序框架(续)

}/*for结束*/}/*main函数结束*//*各自定义函数实现代码*/voidReadData(){…}voidDisplay(){…}voidSearch(){…}…从上述学生信息管理系统的C程序框架可以看出,运用面向过程程序设计方法所设计出来的程序。数据和操作数据的函数是分离的。所有数据都是公用的,一个函数可以使用任何一组数据,而一组数据又能被多个函数所使用。用面向过程程序设计方法所设计出来的程序模型如图1-1所示。1.1面向过程程序设计图1-1面向过程程序设计的程序模型1.1面向过程程序设计

面向过程的结构化程序设计在20世纪60年代末、70年代初从一定程度上缓解了当时的“软件危机”,它在处理较小规模的程序时比较有效。但是,随着人们对大规模软件需求的增长,面向过程的结构化程序设计逐渐显示出它的不足,具体表现在:1.1面向过程程序设计面向过程的结构化程序设计的不足:1.程序设计困难,生产率低下2.数据不安全3.程序修改困难4.代码重用程度低1.1面向过程程序设计不足1.2面向对象程序设计

1.2.1面向对象的编程思想1.2.2面向对象的基本概念1.2.3面向对象程序设计的优点1.2.1面向对象的编程思想具体地讲,面向对象编程的基本思想如下:1.客观世界中的事物都是对象(object),对象之间存在一定的关系。2.用对象的属性(attribute)描述事物的静态特征,用对象的操作(operation)描述事物的行为(动态特征)。1.2面向对象程序设计1.2面向对象程序设计1.2.1面向对象的编程思想(续)3.对象的属性和操作结合为一体,形成一个相对独立、不可分的实体。对象对外屏蔽其内部细节,只留下少量接口,以便与外界联系。4.通过抽象对对象进行分类,把具有相同属性和相同操作的对象归为一类.类是这些对象的抽象描述,每个对象是其所属类的一个实例。1.2面向对象程序设计1.2.1面向对象的编程思想(续)5.复杂的对象可以用简单的对象作为其构成部分。6.通过在不同程度上运用抽象的原则,可以得到一般类和特殊类。特殊类继承一般类的属性与操作,从而简化系统的构造过程。7.对象之间通过传递消息进行通信,以实现对象之间的动态联系。8.通过关联表达类之间的静态关系。1.2面向对象程序设计

1.2.1面向对象的编程思想1.2.2面向对象的基本概念1.2.3面向对象程序设计的优点1.2面向对象程序设计1.2.2面向对象的基本概念

基本概念对象类封装继承消息关联组合多态性1.2.2面向对象的基本概念

1.对象

现实世界对象软件系统现实世界是由千千万万个对象(object)。组成的。1.2.2面向对象的基本概念

对象属性行为描述客观事物的静态特征描述事物的动态特征personName=“Mary”Sex=femaleAge=20RunSpeakstudy对象的基本元素1.2.2面向对象的基本概念图1-2现实世界系统对象模型属性行为对象1属性行为对象2属性行为对象3消息消息消息要使某一个对象实现某一个行为,应当向它传递相应的消息。1.对象1.2.2面向对象的基本概念1.对象在面向对象的软件系统中,对象是用来描述客观事物的一个相对独立体,是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操纵的一组操作组成。属性是用来描述对象静态特征的一个数据项,操作是用来描述对象行为的一个动作序列。1.2.2面向对象的基本概念

软件系统中的一部分对象是对现实世界中的对象的抽象,但其内容不是全盘照搬,这些对象只包含与所解决的现实问题有关的那些内容;系统中的另一部分对象是为了构建系统而设立的。1.2.2面向对象的基本概念2.类person类对客观世界中具有相同属性和行为的一组对象的抽象,它为属于该类的全部对象提供了统一的抽象描述,其内容包括属性和操作。1.2.2面向对象的基本概念2.类在寻找类时,要用到一个概念:抽象。抽象忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,找出事物的共性,把具有共性的事物划分为一类,得出一个抽象的概念。1.2.2面向对象的基本概念2.类类和对象的关系可表述为:

类是对象的抽象,而对象则是类的实例,或者说是类的具体表现形式。1.2.2面向对象的基本概念3.封装所谓“封装”,指两方面的含义:一是用对象把属性和操纵这些属性的操作包装起来,形成一个基本单位,各对象之间相对独立,互不干扰。二是将对象中某些部分对外隐蔽,即隐藏其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为信息隐蔽(informationhiding)。1.2.2面向对象的基本概念4.继承继承特殊类自动地拥有或隐含地复制其一般类的全部属性与操作。1.2.2面向对象的基本概念4.继承继承具有“是一种”的含义。

汽车卡车轿车图1-3继承示例一般类(也称为基类、父类)特殊类(也称为派生类、子类)1.2.2面向对象的基本概念图1-4继承的层次与抽象原则的运用轮船汽车卡车轿车火车车辆飞机运输工具较多地忽略事物之间的差别,

得到较一般的类较多地注意事物之间的差别,

得到较特殊的类4.继承1.2.2面向对象的基本概念图1-5多重继承示例销售经理管理人员兼职技术人员销售人员雇员多继承允许一个特殊类具有一个以上一般类的继承模式4.继承1.2.2面向对象的基本概念5.消息在面向对象方法中,把向对象发出的操作请求称为消息(message)。对象之间通过消息进行通信,实现了对象之间的动态联系。在C++中,消息其实就是函数调用。1.2.2面向对象的基本概念6.关联关联(association)是两个或多个类之间的一种静态关系。教师指导毕业论文学生1*图1-6关联示例1.2.2面向对象的基本概念

7.组合组合描述的是类与类之间的整体与部分的关系。组合是关联的一种,只是它还具有明显的“整体——部分”含义。1.2.2面向对象的基本概念8.多态性(polymorphism)多态性由继承而产生的相关而不同的类,其对象对同一消息会作出不同的响应。1.2面向对象程序设计

1.2.1面向对象的编程思想1.2.2面向对象的基本概念1.2.3面向对象程序设计的优点1.2面向对象程序设计1.2.3面向对象程序设计的优点1.从认识论的角度看,面向对象程序设计改变了软件开发的方式

面向对象程序设计强调从对象出发认识问题域,对象对应着问题域中的事物,其属性和操作分别刻画了事物的静态特征和动态行为,对象之间的继承、组合、关联和依赖关系如实地表达了问题域中事物实际存在的各种关系。1.2面向对象程序设计数据成员成员函数对象1对象2对象3消息消息消息数据成员成员函数数据成员成员函数图1-7面向对象的软件系统分析模型1.2.3面向对象程序设计的优点(续)1.2面向对象程序设计1.2.3面向对象程序设计的优点(续)在面向过程的结构化程序设计中:

程序=算法+数据结构

对象=算法+数据结构程序=(对象+对象+对象+…)+消息或程序=对象s+消息在面向对象程序设计:1.2面向对象程序设计1.2.3面向对象程序设计的优点(续)

2.面向对象程序中的数据的安全性高3.面向对象程序设计有助于软件的维护与复用

1.3面向对象的软件开发1.3面向对象的软件开发1.3面向对象的软件开发1.3面向对象的软件工程包括以下几个阶段面向对象分析面向对象测试面向对象编程面向对象设计面向对象维护objectorientedanalysis,OOAobjectorienteddesign,OODobjectorientedprogramming,

OOPobjectorientedtest,OOTobjectorientedsoftmaintenance,OOSM第1章面向对象程序设计

1.面向对象分析

对系统进行面向对象分析,识别出系统中的对象,定义对象的属性和操作,并抽象出对象类。1.4学生信息管理系统的面向对象分析与设计第1章面向对象程序设计(1)学生对象与学生类考虑问题域,识别系统中的对象与类。

该系统是一个学生信息管理系统,每一个被管理的学生都是该系统中的一个对象,所有学生对象都具有相同的属性:学号、姓名、性别、出生日期、英语成绩、数据结构成绩、C++程序设计成绩、总成绩、平均成绩,相同的操作:计算总成绩、计算平均成绩。对所有学生对象的抽象,形成一个学生类。第1章面向对象程序设计

+计算总成绩

+计算平均成绩

-学号

-姓名

-…-平均成绩学生类

+显示学生信息

+按学号查询学生信息

+按姓名查询学生信息

…+打开文件

+写文件

+新建文件“顺序表”容器类1*

-学生数组

-学生总人数图1-8学生信息管理系统的类图第1章面向对象程序设计(2)顺序表对象与顺序表类

考虑系统责任,把系统责任所要求的每一项功能都落实到某个或某些对象上。该系统要实现对所有需要管理的学生对象信息的输入(从键盘输入)、输出(输出到屏幕)、存储(存储到外存)、读取(从外存读取)、增加、删除、修改、查询、排序、统计等操作。假定学生对象信息在外存中以文件的形式存放,在内存中以顺序表的形式存放。我们把顺序表看作系统中的一个对象,并形象地称它为“容器”。第1章面向对象程序设计(2)顺序表对象与顺序表类

顺序表对象作为用来存储学生对象的容器,其数据结构可以选择最简单的数组,因此,顺序表对象应该具有的属性:以学生对象为元素的对象数组、学生总人数。第1章面向对象程序设计(2)顺序表对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论