谭浩强C程序设计学习教案_第1页
谭浩强C程序设计学习教案_第2页
谭浩强C程序设计学习教案_第3页
谭浩强C程序设计学习教案_第4页
谭浩强C程序设计学习教案_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

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

文档简介

1、会计学1谭浩强谭浩强C程序设计程序设计(chn x sh j)第一页,共82页。第2页/共81页第二页,共82页。这就是面向对象的程序设计的基本思路。为了进一步说明问题,下面先讨论几个有关的概念。第3页/共81页第三页,共82页。种要素的,都可以(ky)作为对象。在一个系统中的多个对象之间通过一定的渠道相互联系,如图8.1示意。要使某一个对象实现某一种行为(即操作),应当向它传送相应的消息。对象之间就是这样通过发送和接收消息互相联系的。第4页/共81页第四页,共82页。图8.1 图8.2第5页/共81页第五页,共82页。可以通过边长计算出三角形的面积,并且输出三角形的边长和面积。计算三角形面积

2、和输出有关数据就是前面提到的行为,在程序设计方法中也称为方法(method)。调用对象中的函数就是向该对象传送一个消息(message),要求该对象实现某一行为(功能)。第6页/共81页第六页,共82页。据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。二是将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为信息隐蔽(imformation hiding)。信息隐蔽还有利于数据安全,防止无关的人了解和修改数据。第7页/共81页第七页,共82页。第8页/共81页第八页,共82页。三角形对象有相同的属性和

3、行为,可以将它们抽象为一种类型,称为三角形类型。在C+中,这种类型就称为“类(class)”。这10个三角形就是属于(shy)同一“类”的对象。类是对象的抽象,而对象则是类的特例,或者说是类的具体表现形式。第9页/共81页第九页,共82页。又增加了新的特征(颜色),“马”是父类,或称为基类,“白马”是从“马”派生(pishng)出来的,称为子类或派生(pishng)类。C+提供了继承机制,采用继承的方法可以很方便地利用一个已有的类建立一个新的类。这就是常说的“软件重用”(software reusability) 的思想。第10页/共81页第十页,共82页。在C+中,所谓多态性(polymor

4、phism)是指: 由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。第11页/共81页第十一页,共82页。图8.3第12页/共81页第十二页,共82页。来(或者说激活这些对象),完成自己职责范围内的工作。各个对象的操作完成了,整体任务也就完成了。显然,对一个大型任务来说,面向对象程序设计方法是十分有效的,它能大大降低程序设计人员的工作难度,减少出错机会。第13页/共81页第十三页,共82页。包括类和对象的概念、类的机制和声明、类对象的定义与使用等。这是面向对象的程序设计的基础。第14页/共81页第十四页,共82页。(c

5、hn x sh j)所面对的是一个个对象。所有的数据分别属于不同的对象。在面向过程的结构化程序设计(chn x sh j)中,人们常使用这样的公式来表述程序:程序=算法数据结构第15页/共81页第十五页,共82页。程序 = (对象+对象+对象+) + 消息或:程序 = 对象s + 消息“对象s”表示多个对象。消息的作用(zuyng)就是对对象的控制。程序设计的关键是设计好每一个对象,及确定向这些对象发出的命令,使各对象完成相应操作。第16页/共81页第十六页,共82页。第17页/共81页第十七页,共82页。()之间的联系,并将具有相同属性和行为的对象用一个类(class)来表示。建立一个能反映

6、真实工作情况的需求模型。第18页/共81页第十八页,共82页。)3. 面向对象编程(object oriented programming,OOP)根据面向对象设计的结果,用一种计算机语言把它写成程序,显然应当选用面向对象的计算机语言(例如C+),否则无法(wf)实现面向对象设计的要求。第19页/共81页第十九页,共82页。因为对象的封装性,修改一个对象对其他对象影响很小。利用(lyng)面向对象的方法维护程序,大大提高了软件维护的效率。第20页/共81页第二十页,共82页。可以不必严格按照以上5个阶段(jidun)进行,往往由程序设计者按照面向对象的方法进行程序设计,包括类的设计(或选用已有

7、的类)和程序的设计。第21页/共81页第二十一页,共82页。类型,然后用它去定义结构体变量。同一个结构体类型可以定义出多个不同的结构体变量。第22页/共81页第二十二页,共82页。第23页/共81页第二十三页,共82页。第24页/共81页第二十四页,共82页。第25页/共81页第二十五页,共82页。第26页/共81页第二十六页,共82页。;private和public称为成员访问限定符(member access specifier)。第27页/共81页第二十七页,共82页。private类体中,关键字private和public可以分别出现多次。每个部分的有效范围到出现另一个访问限定符或类体

8、结束时(最后一个右花括号(kuho)为止。但是为了使程序清晰,应该养成这样的习惯: 使每一种成员访问限定符在类定义体中只出现一次。第28页/共81页第二十八页,共82页。不少用户也把自己或本单位经常用到的类放在一个专门的类库中,需要用时直接调用,这样就减少了程序设计的工作量。第29页/共81页第二十九页,共82页。第30页/共81页第三十页,共82页。(2) 类名 对象名如 Student stud1,stud2;直接用类名定义对象。这两种方法是等效的。第1种方法是从C语言继承下来的,第2种方法是C+的特色,显然第2种方法更为简捷方便。第31页/共81页第三十一页,共82页。第32页/共81页

9、第三十二页,共82页。直接定义对象,在C+中是合法的、允许的,但却很少用,也不提倡用。在实际的程序开发中,一般都采用上面3种方法中的第1种方法。在小型程序中或所声明的类只用于本程序时,也可以用第2种方法。在定义一个(y )对象时,编译系统会为这个对象分配存储空间,以存放对象中的成员。第33页/共81页第三十三页,共82页。第34页/共81页第三十四页,共82页。(shngmng)class定义的类,如果不作private或public声明(shngmng),系统将其成员默认为private,在需要时也可以自己用显式声明(shngmng)改变。如果希望成员是公用的,使用struct比较方便,如果

10、希望部分成员是私有的,宜用class。建议尽量使用class来建立类,写出完全体现C+风格的程序。第35页/共81页第三十五页,共82页。(它能否(nn fu)被调用)以及它的作用域(函数能使用什么范围中的数据和函数)。例如私有的成员函数只能被本类中的其他成员函数所调用,而不能被类外调用。第36页/共81页第三十六页,共82页。是类中其他成员的工具函数(utility function),类外用户不能调用这些私有的工具函数。类的成员函数是类体中十分重要的部分。如果一个类中不包含成员函数,就等同于C语言中的结构体了,体现不出类在面向对象程序设计中的作用。第37页/共81页第三十七页,共82页。第

11、38页/共81页第三十八页,共82页。 display( ) 或 display( )则表示display函数不属于任何类,这个函数不是成员函数,而是全局函数,即非成员函数的一般普通函数。第39页/共81页第三十九页,共82页。数,其函数体只有23行,一般可在声明类时在类体中定义。多于3行的函数,一般在类体内声明,在类外定义。第40页/共81页第四十页,共82页。定义的成员函数中不包括循环等控制结构,C+系统会自动将它们作为内置(inline)函数来处理。也就是说,在程序调用这些成员函数时,并不是真正地执行函数的调用过程(如保留返回地址等处理),而是把函数代码嵌入程序的调用点。这样可以大大减少

12、调用成员函数的时间开销(ki xio)。第41页/共81页第四十一页,共82页。第42页/共81页第四十二页,共82页。第43页/共81页第四十三页,共82页。第44页/共81页第四十四页,共82页。序的执行效率提高了,但从软件工程质量的角度来看,这样做并不是好的办法。只有在类外定义的成员函数(hnsh)规模很小而调用频率较高时,才将此成员函数(hnsh)指定为内置函数(hnsh)。第45页/共81页第四十五页,共82页。图8.4第46页/共81页第四十六页,共82页。显然,这样做会大大节约存储空间。C+编译系统正是这样做的,因此每个对象(duxing)所占用的存储空间只是该对象(duxing

13、)的数据部分所占用的存储空间,而不包括函数代码所占用的存储空间。如果声明了一个类:第47页/共81页第四十七页,共82页。第48页/共81页第四十八页,共82页。(2) 不要(byo)将成员函数的这种存储方式和inline(内置)函数的概念混淆。(3) 应当说明: 常说的“某某对象的成员函数”,是从逻辑的角度而言的,而成员函数的存储方式,是从物理的角度而言的,二者是不矛盾的。第49页/共81页第四十九页,共82页。成员。第50页/共81页第五十页,共82页。对象名.成员名不仅可以在类外引用对象的公用数据成员,而且还可以调用对象的公用成员函数,但同样必须指出对象名,如第51页/共81页第五十一页

14、,共82页。第52页/共81页第五十二页,共82页。第53页/共81页第五十三页,共82页。引用变量t2,并使之初始化为t1coutt2.hour; /输出对象t1中的成员hour由于t2与t1共占同一段存储单元(即t2是t1的别名),因此t2.hour就是t1.hour。本章(bn zhn)第8.6节的例8.2中的程序(b),介绍的是引用变量作为形参的情况,读者可以参考。第54页/共81页第五十四页,共82页。值,显示数据成员的值,对数据进行加工等)。因此,公用成员函数是用户使用类的公用接口(public interface),或者说是类的对外接口。第55页/共81页第五十五页,共82页。而

15、只需知道调用哪个函数会得到什么结果,能实现什么功能即可。通过成员函数对数据成员进行操作称为类的实现,为了防止用户任意修改公用成员函数,改变对数据进行的操作,往往不让用户看到公用成员函数的源代码,显然更不能修改它,用户只能接触到公用成员函数的目标代码(详见8.5.2节)。第56页/共81页第五十六页,共82页。(gngnng),只需修改本类中有关的数据成员和与它有关的成员函数,程序中类外的部分可以不必修改。(2) 如果在编译时发现类中的数据读写有错,不必检查整个程序,只需检查本类中访问这些数据的少数成员函数。第57页/共81页第五十七页,共82页。用该类来定义对象。由于在类体中包含了对成员函数的

16、声明(shngmng),在程序中就可以调用这些对象的公用成员函数。为了实现上一节所叙述的信息隐蔽,对类成员函数的定义一般不放在头文件中,而另外放在一个文件中。第58页/共81页第五十八页,共82页。第59页/共81页第五十九页,共82页。stud.display( ); /执行stud对象的display函数return 0;这是一个包括3个文件的程序,组成两个文件模块: 一个是主模块main.cpp,一个是student.cpp。在主模块中又包含头文件student.h。在预编译时会将头文件student.h中的内容取代#include student.h行。第60页/共81页第六十页,共8

17、2页。图8.6。第61页/共81页第六十一页,共82页。这也是把成员函数的定义不放在头文件中的一个好处。在实际工作中,并不是将一个类声明做成一个头文件,而是将若干个常用的功能相近的类声明集中在一起,形成类库。第62页/共81页第六十二页,共82页。机系统中(一般装到C+编译(biny)系统所在的子目录下),并在程序中用#include命令行将有关的类声明的头文件包含到程序中,就可以使用这些类和其中的成员函数,顺利地运行程序。第63页/共81页第六十三页,共82页。公用(gngyng)接口,在头文件的类体中还提供了成员函数的函数原型声明,用户只有通过头文件才能使用有关的类。用户看得见和接触到的是

18、这个头文件,任何要使用这个类的用户只需包含这个头文件即可。包含成员函数定义的文件就是类的实现。请特别注意: 类声明和函数定义一般是分别放在两个文本中的。第64页/共81页第六十四页,共82页。即可。由于类库的出现,用户可以像使用零件一样方便(fngbin)地使用在实践中积累的通用的或专用的类,这就大大减少了程序设计的工作量,有效地提高了工作效率。第65页/共81页第六十五页,共82页。的一个“消息”,通知它执行其中的display“方法”(即display函数)。上面这个语句涉及3个术语:对象、方法和消息。stud是对象,display( )是方法,语句“stud.display( );”是消息。第66页/共81页第六十六页,共82页。第67页/共81页第六十七页,共82页。是占存储空间的,其数据成员是有值的,可以被引用的。(3) 如果删去主函数的3个输入语句,即不向这些数据成员赋值,则它们的值是不可预知的。第68页/共81页第六十八页,共82页。第69页/共81页第六十九页,共82页。第70页/共81页第七十页,共82页。第71页/共81页第七十一页,共82页。第72页/共8

温馨提示

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

评论

0/150

提交评论