《C++程序设计语言》--第四讲类讲义教材

上传人:yuzo****123 文档编号:142480861 上传时间:2020-08-19 格式:PPT 页数:51 大小:440.50KB
返回 下载 相关 举报
《C++程序设计语言》--第四讲类讲义教材_第1页
第1页 / 共51页
《C++程序设计语言》--第四讲类讲义教材_第2页
第2页 / 共51页
《C++程序设计语言》--第四讲类讲义教材_第3页
第3页 / 共51页
《C++程序设计语言》--第四讲类讲义教材_第4页
第4页 / 共51页
《C++程序设计语言》--第四讲类讲义教材_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《《C++程序设计语言》--第四讲类讲义教材》由会员分享,可在线阅读,更多相关《《C++程序设计语言》--第四讲类讲义教材(51页珍藏版)》请在金锄头文库上搜索。

1、,第一节 面向对象程序设计思想 第二节 面向对象的方法 第三节 面向对象的标记 第四节 类和对象 第五节 构造函数与析构函数 第六节 类的组合 第七节 类模板,第四章 类与对象,第一节 面向对象程序设计思想,一、软件系统开发方法 现在常用的软件系统开发的方法有:传统方法、结构化方法、信息建模方法、面向对象方法。下图是系统开发方法论技术和工具:,教材中强调了两种方法: 结构化程序设计 面向对象程序设计 具体内容参看教材p95-96,封装或信息隐蔽,封装或信息隐蔽指软件的组成部分(模块、子程序、方法等)应该互相独立,或者隐藏设计的细节。,在系统分析和设计中,系统分析员把问题域分解为小的封装单元,这

2、些分析和设计决定最终成为软件模块,封装就是有利于灵活地局部修改和维护软件模块。,封装或信息隐蔽用于以下两种情况,1、当人们只能使用或接触整个系统的某个子集时。例如:当开发一个信息系统时,开发小组成员受命开发系统的某个部分,不需接触其它成员开发的部分。所以,封装或信息隐蔽适合于团队开发。,2. 有意防止信息系统的某些部件注意或利用系统的其它部件。这涉及到封装的另外一个方面-分配责任。正如现实生活中一个人负有某种责任,信息系统中的一个部件也有自己的责任,比如自动取款机的付钞功能,系统其它部件则担任付钞以外的其它责任。,注意:在传统方法中,封装通常局限于将功能和数据分开封装;而在面向对象的方法中,封

3、装将功能和数据同时装入对象中。,继承,继承是表示相似性质的机制。正如一个人同时继承父母的外貌特点一样,信息系统组成成分也从有关部件继承某些特点。例如:右图显示了人和教师、学生及管理者之间的继承关系。,人和教师、学生及管理者之间是继承(父子 )关系, 教师、学生、管理者之间是兄弟关系。 人的特点如姓名、性别、年龄等,为继承层次中所有子节点继承;有些特点则为子节点独有,如授课时间只对教师适用,平均分数只对学生适用,头衔只对管理者适用。同样,一些人能做的事也对教师、学生及管理者适用,例如吃饭、睡觉等,同样,有些事则为子节点独有。注意:继承在层次中是自上而下单向进行的。,多态,多态一般指具有多种形态的

4、能力。如:水有三种形态,液体、气体和固体。在某种程度上,在车里观察交通灯的反应是多态的,当交通灯闪现不同颜色时,人的反应是不同的。又如打印程序可以打印字符、数字、图形和图像,打印程序由于知道如何打印图文,因而是多态的。,第二节 面向对象的方法,面向对象是一种软件开发方法,软件开发的目的是为了进行数据处理,所以程序中包含了数据以及对数据的操作代码。面向对象的编程解决问题的思路从对象(人、地方、事情等)角度入手,而不像传统方法与结构化方法一样从功能入手。 面向对象的开发强调从问题域的概念到软件程序和界面的直接映射;心理学的研究也表明,把客观世界看成是许多对象更接近人类的自然思维方式。对象比函数更为

5、稳定;软件需求的变动往往是功能相关的变动,而其功能的执行者-对象-通常不会有大的变动。另外,面向对象的开发也支持、鼓励软件工程实践中的信息隐藏、数据抽象和封装。在一个对象内部的修改被局部隔离。面向对象开发的软件易于修改、扩充和维护。,面向对象编程-基本概念,在面向对象编程中,程序被看作是相互协作的对象集合,每个对象都是某个类的实例,所有的类构成一个通过继承关系相联系的层次结构。面向对象的语言常常具有以下特征:对象生成功能、消息传递机制、类和遗传机制。这些概念当然可以并且也已经在其他编程语言中单独出现,但只有在面向对象语言中,他们才共同出现,以一种独特的合作方式互相协作、互相补充。 过程化编程模

6、式: 参数输入- | 代 码 | -结果输出 为实现某个功能,参数被传入某个处理过程,最后传回计算结果。 面向对象编程模式: 界面 - | 对象数据结构和 操作,OO编程中,功能是通过与对象的通讯获得的。 对象可以被定义为一个封装了状态和行为的实体;或者说是数据结构(或属性)和操作。 状态实际上是为执行行为而必须存于对象之中的数据、信息。 对象的界面,也可称之为协议,是一组对象能够响应的消息的集合。 消息是对象通讯的方式,因而也是获得功能的方式。对象受到发给他的消息后,或者执行一个内部操作(有时成为方法或过程),或者再去调用其他对象的操作。所有对象都是类的实例。类是具有相同特点的对象的集合,或

7、者也可以说,类是可用于产生对象的一个模版。对象响应一个消息而调用的方法,由接受该消息的对象自己决定。 类可以以一种层次结构来安排。,第三节 面向对象的标记,参看教材p100-101,第四节 类与对象,一 类和类定义 对象和对象定义 初始化问题 静态成员 小结,一 类和类定义-1、类的声明,类和对象是面向对象程序设计(OOP)的两个最基本概念。所谓对象就是客观事物在计算机中的抽象描述;类是对具有相似属性和行为的一组对象的统一描述。 类的定义 C+的类是在结构体的基础上扩充而来的。类是把各种不同类型的数据(称为数据成员)和对数据的操作(成员函数)组织在一起而形成的用户自定义的数据类型。 C+中,类

8、定义包括类说明和类实现两大部分。说明部分提供了对该类所有数据成员和成员函数的描述,而实现部分提供了所有成员函数的实现代码。,类定义的一般形式为: class 类名 private: 数据成员或成员函数 protected: 数据成员或成员函数 public: 数据成员或成员函数 ;/注意:此处分号不要少 ,定义类时,当未指明成员是哪部分时,默认是属于private成员,但一般不要采用默认形式。,几点说明,(1)大括号的部分是类的成员(数据成员和函数成员),它们分成三部分,分别由private、public、proctected三个关键字后跟冒号来指定。这三部分可以任何顺序出现,且在一个类的定义

9、中,这三部分并非必须同时出现。 (2)类的数据成员可以使任何数据类型; (3)类的数据成员允许使用存储类型static,但其它三种存储类型不能使用; (4)类中数据成员不允许使用表达式进行初始化; (5)类中数据成员与成员函数可用const修饰。 (6)经常习惯地将类定义的说明部分或者整个定义部分(包含实现部分)放到一个头文件中。,如:下例中定义描述图书的类定义 class Record private: /private成员 char bookname20; /数据成员bookname, / 用于表示图书的名称 int number; /数据成员number,表示图书编号 public:/p

10、ublic成员 void regist(char *a,int b); /成员函数regist,用于给 /各数据成员赋值 void show(); /成员函数show,显示各数据成员的值 ;,根据类的定义,可看出:类是实现封装的工具,所谓封装就是将类的成员按使用或存取的方式分类,有条件地限制对类成员的使用,而封装是通过public和private与成员函数实现的。private的成员构成类的内部状态,public的成员则构成与外界通信的接口,通过public的成员函数来使用private的数据成员,从而在C+中实现了封装。,2、类成员的访问控制,从访问权限上来分,类的成员又分为:公有的(pub

11、lic)、私有的(private)和保护的(protected)三类。 公有的成员用public来说明,公有部分往往是一些操作(即成员函数),它是提供给用户的接口功能。这部分成员可以在程序中引用。 私有的成员用private来说明,私有部分通常是一些数据成员,这些成员是用来描述该类中的对象的属性的,用户是无法访问它们的,只有成员函数或经特殊说明的函数才可以引用它们,它们是被用来隐藏的部分。 保护的成员用protected来说明,这种成员只有该类的派生类可以访问,其余的在这个类外不能访问。保护类(protected)将在以后介绍。,类成员的访问权限表,返回,对于一个无继承关系的单一类(独立类),

12、其访问权限可参考下图:,该类的对象,3、类成员函数的特性,类的成员函数可以分为内联函数和外联函数。内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。而说明在类体内,定义在类体外的成员函数叫外联函数。外联函数的函数体在类的实现部分。 引入内联函数的目的是为了解决程序中函数调用的效率问题。因为内联函数在调用时不是像一般函数那样要转去执行被调用函数的函数体,执行完成后再转回调用函数中,执行其后语句,而是在调用函数处用内联函数体的代码来替换,这样将会节省调用开销,提高运行速度。,在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换。显然,这种做法不会产生

13、转去转回的问题,但是由于在编译时将函数休中的代码被替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间代销上不象函数调用时那么大,可见它是以目标代码的增加为代价来换取时间的节省。 内联函数的定义方法内联函数的定义方法与一般函数一样,只是在函数定义的头前加上关键字inline即可。如: inline int add_int (int x, int y, int z) return x+y+z; ,返回,二 对象和对象定义-1、对象的创建,类是抽象的概念,而对象是具体的,类只是一种数据类型,而对象是属于该类(数据类型)的一个变量,占用了各自的存储单元,每个对象各自具有了该类的一套数据

14、成员(静态成员除外),而所有成员函数是所有对象共有的。每个对象的函数成员都通过指针指向同一个代码空间。(参看教材p124图) 对象的定义格式: (1)class 类名 对象1,对象2, ,对象n ; (2)类名 对象1,对象2, ,对象n ; (3)类名 对象1(参数表), ,对象n (参数表) ; 如: TDate date1, date2, *Pdate, date31;,2、对象成员的使用,访问对象的成员包括读写对象的数据成员和调用它的成员函数,其访问格式是: . 或者 .() 前者用来表示数据成员的,后者用来表示成员函数的。如:上例中已定义了类Record,则: Record book

15、1,book2; /此处的book1,book2就是Record /类型,也就是类的两个对象 可参看教材p125程序5-3-1,如上例中,对象的主函数如下: void main() Record book1,book2; /定义对象book1和book2 /调用成员函数regist,给book1的两个数据成员 /bookname和number赋值 book1.regist(“C+编程教程”, 1001); /调用成员函数regist,给book2的两个数据成员赋值 book2.regist(“C+语言参考”, 1002); /调用成员函数show,显示book1对象的数据成员 /booknam

16、e和number的值 book1.show(); /调用成员函数show,显示book2对象的数据成员 /bookname和number的值 book2.show(); ,如改为下面的代码,则错误: void main() Record book1,book2; /由于bookname和number是类Record的私有成员,在类外不能直接使用,即对象不能直接使用。 strcpy(book1.bookname,“C+编程教程”); book1.number=1001; strcpy(book2.bookname,“C+语言参考”); book2.number=1002; book1.show(); book2.show();

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号