面向对象课件05(第五章)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章
类与对象
第五章 类与对象
§5.1 面向对象方法 §5.2 类的定义 §5.3 对象的创建 §5.4 对象的初始化 §5.5 特殊的类成员
§5.1 面向对象方法
面向对象的基本思想 面向对象思想的由来与发展 面向对象的基本概念
§5.1 面向对象方法
面向对象的基本思想 ▪ 从现实世界中客观存在的事物(对象)出发
通常,将简单的函数作为内联函数 将功能复杂的函数作为非内联函数
§5.2 类的定义
类定义可分为类界面与类实现 类界面:只包括类的所有数据成员和成 员函数原型 存放在头文件中(.HPP) 类实现:包括类的所有成员函数的定义 存放在源文件中(.CPP)
§5.2 类的定义
类的成员的访问控制(封装在类中的实现)
--公有 (public)
--公开
--保护 (protected)
--适当公开
--私有 (private)
--不公开
§5.2 类的定义
封装(信息隐藏)
实现(implementation)
接口(interface)
§5.2 类的定义
封装的好处
用户角度:简单 只了解接口,不用了解细节 只需要结果,不规定实现方式
§5.1 面向对象方法
类与对象的关系
类是抽象的,对象是具体的 类是模板,对象是实例 类是类型,对象是变量 类是静态的,对象是动态的
§5.1 面向对象方法
类是具有相似特征的对象的抽象
--文件类 --书 类 --学生类
所有具体文件对象的抽象 所有具体书对象的抽象 所有具体学生对象的抽象
§5.2 类的定义
…… } bool FILE::rename(……) {
…… } bool FILE::print( ) {
…… }
§5.2 类的定义
注:
① 类中说明的数据成员不能初始化 ② 类中数据成员的类型可以是int,char,
float等各种数据类型,还可以是对象
§5.2 类的定义
内联函数与非内联函数
注: 默认的类成员访问控制方式为private 各种访问控制方式在类定义体中的先后
顺序无关 通常将对外接口部分public放在前
举例:用“售报亭”对象描述现实中的一个售 报亭
售报亭
报刊A
属 报刊B 性 ……
钱箱
顾 客 服 报刊零售 务 货款清单
消息:顾客对售报亭说:“买一份《每日新报》!” 消息的接受者:某个售报亭 要求的服务:报刊零售 输入的信息:要买的报刊种类,份数和递进去的钱 返回的信息:买到的报纸和找回的零钱
象、类、继承、消息传递等概念进行软 件系统构造的软件开发方法
§5.1 面向对象方法
面向对象的由来与发展
面向对象方法起源于面向对象的编程语言 在编程语言得到充分发挥和应用的同时,面向 对象方法得到了发展。 反过来又为面向对象编程提供了先期的设计和 指导
§5.1 面向对象方法
面向对象方法是软件理论的返璞归真 软件开发的发展过程
FILE your_file;
my_file.copy(your_file); your_file.rename(“newname”); }
§5.3 对象的创建
域操作符 :: ① ::identifier ② classname::identifier ③ identifier
文件域标识符 类域标识符 当前域标识符
bool rename(char *new_name);
bool print( );
private:
char file_name[100]; int length; char *contents;
属性 数据成员
};
操作 成员函数
§5.2 类的定义
操作的实现(成员函数的定义)
bool FILE::copy(……) {
实现:构造函数
§5.4 对象的初始化
构造函数与析构函数 在C++中,类的成员函数有两种:
⑴ 构造函数与析构函数 ⑵ 普通的成员函数 构造函数与析构函数是在类定义体中说明的 两个特殊的成员函数
§5.4 对象的初始化
class FILE {
public: FILE(char name[]); ……
bool FILE::rename(char file_name) {
strcpy(FILE::filename, file_name); }
举例:定义一个日期类,该类的对象是某个具体日期
//日期类的界面
class DATE {
public: void setdate(int y, int m, int d); int isleapyear( ); void print( );
§5.2 类的定义
类作用域 类的作用域包括:
类的定义体{ }; 类的所有非内联函数的定义体 类成员的作用域是类作用域
类对象的作用域遵循一般变量的作用域规则
§5.3 对象的创建
直接创建对象 使用对象成员 对象的作用域与生存期 举例
§5.3 对象的创建
创建对象有两种方式:
直接创建
动态创建(用new运算符创建)
bool FILE::rename(char *new_name) {
strcpy(file_name, new_name); }
注: 在类体外定义的成员函数要在函数名前加上类名, 以便与普 通函数相区别
§5.2 类的定义
⑶ 二者比较 内联函数的好处: 类的定义集中(将类的所有成员都放在类定义体中) 运行速度快 内联函数的缺点: 类定义的规模太大 可读性不好
• 类定义的一般形式 • 内联函数与非内联函数 • 类成员的访问控制 • 类作用域
§5.2 类的定义
类定义的一般形式 class 类名 {
C++合法的标 识符,用大写
public: 公有数据和函数
private: 私有数据和函数
};
分号不能丢!
类定义 体中的 数据和 函数分 别称为: 数据成 员和成 员函数
§5.1 面向对象方法
用面向对象思想构造软件的主要内容
① 对象是系统的基本单位 ② 对象的属性和操作的有机结合组成一个完
整的对象 ③ 具有共同特征的对象抽象成类 ④ 对类进一步抽象,形成类簇 ⑤ 对象之间存在静态关系和动态关系(组合、
继承、消息等)
§5.1 面向对象方法
面向对象基本思想——抽象
§5.1 面向对象方法
例:“文件”作为一个对象
属性:
文件名—filename 文件长度—length 修改日期—modify-date 文件内容—contents
操作:
文件复制——copy 文件更名——rename 文件打印——print ………..
§5.1 面向对象方法
消息
向对象发出的服务请求
程序员 的智慧 和技巧
面向过程 面向数据 面向功能 面向应用 面向数据流
面向对象
§5.1 面向对象方法
面向对象基本概念
对象 消息 类 类与对象的关系
§5.1 面向对象方法
对象
对象是对问题域中客观存在的事物的抽象,它 是一组属性和在这些属性上的操作的封装体
对象的两大要素:属性和操作
--属性:状态,特征,组成成员 --操作:修改属性,访问属性,执行命令
直接创建对象
格式: <类名> <对象名表>
例如: FILE f1,f2;
int x, y;
§5.3 对象的创建
使用对象成员
格式:
<对象名> . <数据成员名> 或 <对象名> . <函数成员名>(参数表)
其中‘.’称为成员选择运算符
§5.3 对象的创建
访问成员变量
strcpy(f1.file_name, “oopd.dat”);
⑴ 内联函数
class FILE {
……. bool rename(char *new_name)Байду номын сангаас{
strcpy(file_name, new_name); } …… };
成员函数的函数体定义在类体内
§5.2 类的定义
⑵非内联函数
class FILE {
……. bool rename(char *new_name); ……. };
//以上存入date.cpp文件中
//分析下列程序的输出结果
#include<iostream.h> #include”date.cpp” void main( ) {
DATE d1, d2; d1.setdate(1996, 5, 4); d2.setdate(2004,11, 8); int leap=d1.isleapyear( ); cout<<leap<<endl; d1.print( ); d2.print( ); }
private: int year, month, day;
}; //以上存入date.hpp文件中
//日期类的实现
#include”date.hpp” void DATE::setdate(int y, int m, int d) {
year=y; month=m; day=d; } int DATE::isleapyear( ) { return (year%4==0&&year%100!=0)||(year%400==0); } void DATE::print( ) { cout<<year<<‘,’<<month<<‘,’<<day<<endl; }
§5.2 类的定义
类定义体中包括两种类的成员: 数据成员和函数成员
通常类的定义格式: class 类名 { public: 成员函数 private: 数据成员 };
§5.2 类的定义
例:定义一个“文件”类
class FILE
{
public:
bool copy(FILE &target);
对象角度:保护 信息安全(不直接访问数据) 安全审计(auditing)
§5.2 类的定义
访问控制的基本原则:
类的数据成员一般不公开
--private, protected
表示接口的成员函数一般公开
--public
与实现细节有关的成员函数不公开
-- private, protected
§5.2 类的定义
现实世界的事物抽象成对象 现实世界事物之间的关系抽象成软件系统中
对象之间的关系 具有共同特征的对象抽象成类 具有共同特征的类抽象成基类和派生类
§5.1 面向对象方法
面向对象基本思想——封装
对象是属性和操作的组合 对象的表现(服务,接口)和实现细节分开
§5.1 面向对象方法
面向对象方法的定义 利用抽象、封装等机制,借助于对
来构造系统 对象:对问题领域内人、物、事情等的抽象 ▪ 并在系统构造中运用人类的自然思维方式 (抽象、分类、组合、继承、封装)
§5.1 面向对象方法
面向对象不仅是一些具体的软件开发 技术,它是一整套关于如何看待软件系 统与现实世界关系,以何种观点来研究 问题并进行求解,以及如何进行系统构 造的软件方法学
▪ 是面向对象系统中对象之间交互的途径 ▪ 要素:发送者、接受者、服务、参数 ▪ oopl中的消息是对类的成员函数的调用 ▪ 对消息的响应取决于接受消息的对象
§5.1 面向对象方法
类 class
类是具有相同属性和操作的一组对象的集合,它为属 于该类的全部对象提供了统一的抽象描述
类是对一类对象的抽象 类定义了这一类对象所共有的特征和行为 人类抽象思维的产物 oopl中的类相当于一种数据类型
程序执行结果: 1 1996, 5, 4 2004, 11, 8
§5.4 对象的初始化
对象的初始化问题 构造函数 构造函数的含义及特点 默认构造函数 析构函数
§5.4 对象的初始化
类对象成员不能在类定义时初始化
class FILE {
public: …… private:
int length=0; char file_name[]=“test.cpp”; };
f2.length+=10; 访问成员函数
f1.copy(f2); f1.rename(“class A”);
注:只有public的成员
才能调用或访问
§5.3 对象的创建
对象的作用域与生存期
遵循一般变量的作用域、生存期规则
例:
全局对象
FILE my_file;
void main( ) {
局部对象
类是一种模板,类定义时并不分配内存
§5.4 对象的初始化
另一种情况:
FILE myfile; myfile.file_name[]=“test.cpp”;
数据成员file_name是私有的,外界不能访问, 只能通过类中定义的成员函数来访问
§5.4 对象的初始化
类成员的初始化在对象创建时进行 FILE my_file(“test.cpp”); FILE your_file(“noname.cpp”);
相关文档
最新文档