当前位置:文档之家› 类和对象

类和对象


3
道生一、一生二、 二生三、三生万物
对象
消息 程序
4
本学期的知识点MAP
5
第8章 类和对象
8.1 8.2 8.3 8.4 面向对象程序设计方法 类的声明和对象的定义 对象成员的引用 简单应用举例
6
8.1 面向对象程序设计方法概述
软件工程的发展历史
软件附属 于硬件
软件作为 单独产品
面向 过程

提问:调用不同对象的成员函数(如T1.display() 和 T2.display()) 时都是执行同一段函数代码,为什么执行结果不相同? C++的this的指针
25
8.3 对象的引用
访问对象中的成员的3种方法
通过对象名和成员运算符访问对象中的成员 通过指向对象的指针访问对象中的成员 通过对象的引用变量访问对象中的成员
10
8.1 面向对象程序设计方法
面向对象程序设计基本思想 范式:程序 = 对象+消息 思路:bottom up设计对象。任何系统都是有若干对象组成,对象间 通过消息作用构成一个有序系统(软件)。以数据(对象)为中心 对象有两大属性:属性(数据)和行为(方法/函数) 特点:数据和函数捆绑,即属性和行为是对象不可分离两特征 核心问题:对象的设计与封装
19
20
类的访问限定是源代码级 的保护;即有编译器来检 查,不是运行时的限定
21
22
类声明和成 员函数实现 分离
你要了解学生 经济情况吗? 找食堂师傅
23
24
8.3对象的引用
对象的内存分配 用类来定义对象时,系统会为每一个对象分配存储空间 每个对象所占用的存储空间只是该对象的数据成员所占用 的存储空间,而不包括函数代码所占用的存储空间;可使用 cout<<sizeof(类名)来显示对象(类)存储空间大小
在面向对象的程序设计中,最关键的工作是类的
设计。所有的数据和对数据的操作都体现在类中。 只要把类定义好,编写程序的工作就显得很简单了
领导艺术:调用每个员工积极性,只要结果,不管过程
33
本讲重点分析



面向对象程序设计特点:程序 = 对象 + 消息 类与对象的关系(类和对象关系类似于结构体类型与结构 体变量);类的申明格式 类的封装性 类中成员函数定义与声明,与非成员函数的区别 对象成员的引用3种方式 建议8.2.4节不看,8.6.2节重点看;下讲介绍第9章内容
2
《程序设计(一)》内容回顾


程序=算法(ห้องสมุดไป่ตู้数)+数据结构(类型)
数据结构 数据类型
基本类型
指针类型
空类型
构造类型
文件
整型 字符型 实型 枚举类型 数组类型 结构体类型 共用体类型 (浮点型) (自定类型) (自定义类型)
单精度型
双精度型
算法(函数) 程序结构:顺序,分支,循环以及模块调用 算法:打擂台、冒泡和选择排序、穷举法、递推法、递推法等
12
8.1 面向对象程序设计方法
13
8.2对象的定义和抽象
1. 对象的定义
任何具备属性和行为两种要素的事物都可看成对象(object)
。对象可大可小,但有两要素:属性(attribute)和行为 (behavior) 对象是构成系统的基本单位,对象之间通过发送和接收消息 互相联系 C++的对象都是由数据(属性)和函数(方法)两部分组成; 是通过类(class)来描述的
16
4.类的封装性 进行数据和行为的绑定 引入访问限定 实现公用接口与私有实现的分离
17
成员函数的性质
类成员函数和面向过程的函数一样:也有返回值和函数类型
成员函数可以访问本类中任何成员(包括私有的和公用)
成员函数的定义分为:类内定义和类外定义
∷作用域限定符
18
inline 函数(参考4.5节)
对象=属性(数据) +行为(方法)
11
三国杀游戏软件中对象
8.1 面向对象程序设计方法
面向对象程序设计基本方法
STEP1:对象封装。设计设计程序所需的各种类型对象, 即决定把哪些数据和操作(算法)封装在一起 STEP2:消息调用。编写main()来实现对象间消息交互 。消息交互(函数调用)来实现对象之间通信。各个对象 的操作完成,整体软件的任务也就完成了 例 请 客 吃 饭 程 序
面向 对象
面向 构件
面向 服务
50年代
60年代
70年代
80年代
90年代
现在
思想决定了方法、方法决定了效率
7
8.1 面向对象程序设计方法概述
C++语言优点 保留了C语言的面向过程设计方法 增加了面向对象的程序设计方法 增加了通用程序设计方法

8 Bjarne Stroustrup
8.1 面向对象程序设计方法
面向过程程序设计思想
范式:程序=算法+数据结构 思路:top down细分模块(自顶而下,逐步细分)将程序按“功能 ”分解为多个子过程(函数)。程序设计是以算法(函数)中心 特点:函数与数据分离;数据都是公用的,一个函数可以使用任何一 组数据,而一组数据又能被多个函数所使用 核心问题:算法(函数)设计和数据定义
消息
对象(t1)行为
14 对象(t1)属性
8.2对象的定义和抽象
2.对象的抽象(类)
类(class)代表了一批对象的共同特征。即类是对象的抽象
(abstraction),对象是类类的具体实例(instance) 两者的关系类似于结构体类型和结构体变量的关系。先声 明结构体类型,再用它去定义若干结构体变量。因此,类可 以看作一种特殊的数据类型 类是抽象的,不占用内存;对象是具体的,占用存储空间
26
8.3 对象的引用
通过对象名和成员运算符访问对象中的成员
归纳:访问对象中成员的一般形式为对象名.成员名 问题:在main()中,是否可以写:stud.num=10;?
27
8.3 对象的引用
通过指向对象的指针访问对象中的成员
28
8.3 对象的引用
通过对象的引用变量来访问对象中的成员(参考6.9节) C++可以对一个变量取另外别名(Reference), 即变量的引用。 如,int a; int &b=a; 则b称为a的引用 一个对象也定义了一个引用(别名),它们是共占同一段存 储单元的,即同一个对象,只是用不同的名字表示而已
15
8.2 类的声明和对象的定义
3.类的声明方法 类可以理解用户自定义的数据类型。定义对象之 前,先要申明类。即用户自定义类 也可以使用别人已申明类来定义对象 C++中声明一个类格式如下:
class 类名 { private: 私有数据和函数; public: 公用数据和函数; };
成员访问限定符
29
8.4 简单应用举例
找出一个整型数组中的元素的最大值
问题:分析上述程序实现的功能?
30
8.4 简单应用举例
31
32
8.4 简单应用举例
总结
定义成员函数只是设计了一组操作代码,并未实
际执行,只有在被调用时才真正地执行这一组操作
主函数很简单,语句很少,只是调用有关对象的
成员函数,去完成相应的操作
函数调用时需要一定的时间和空间的开销。C++提供一种提高效率的方法,
即在编译时将所调用函数的代码直接嵌入到主调函数中,而不是在函数执行 时将流程转出去。这种嵌入到主调函数中的函数称为内置函数(inline function) 指定内置函数的方法只需在函数首行的左端加一个关键字inline即可 如果在类体中定义的成员函数中不包括循环等控制结构,编译系统会自动将 它看作内置函数。因此,对类内定义的成员函数,可省略inline,而类外定 义则不能省
9
8.1 面向对象程序设计方法
面向过程程序设计问题
难以满足大型、复杂程 序设计
难以对程序进行修改、 扩展 程序代码的重用性差 程序数据安全性差 程序调试和测试困难
犀利哥和天仙妹婚礼盛大场面 嘉宾100人,佳肴100盘,服务人员60个…. 试写出婚礼运行算法????
与现实世界有点脱 节……
类的私有数据和函数
类的公共函数
34
面向对象程序的4大特征之一:封装性
第1次实验练习
本次练习必做题2道题,提交时间第3周末前。要求:提交源代码和运行 结果截屏,形成WORD文件通过网络学堂提交 第1题:声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage) 等属性,有两个公有成员函数enter()输入对象CPU-1的属性值、display() 显示对象CPU-1属性值。其中rank为枚举类型CPU_Rank,声明为enum CPU_Rank={P1=1,P2,P3,P4,P5,P6,P7};frequency为单位是MHz的整型数, voltage为浮点型的电压值。并编写程序调试 第2题:“犀利”人事管理系统 话说犀利哥和天仙妹成家后,发奋图强,成立了自己公司—“天仙犀利致 富有限公司”。公司需要需开发一套人事管理软件。要求:(1)对公司的雇员 信息进行封装为类employee。通过employee类抽象为私有数据成员 individualEmpNo(个人编号)、grade(级别)和accumPay (月薪),(2) 编写了相应的操作函数,从而实现对私有数据的访问。如:设置编号、级别 和月薪,并输出每个雇员的基本信息。(3)本程序分为两个独立的文档: employee.h(类申明)和XXX(自己姓名-学号).ccp(实现);(4)公司 目前有4个员工,在主程序中定义4个对象,调用相关函数实现I/O录入和展 示4名员工信息 35 提示:第2道题在本学期后面练习中需要不断扩展,大家注意保存
相关主题