类的封装性和信息隐藏.ppt

上传人:xin****828 文档编号:20001707 上传时间:2021-01-24 格式:PPT 页数:13 大小:395.36KB
收藏 版权申诉 举报 下载
类的封装性和信息隐藏.ppt_第1页
第1页 / 共13页
类的封装性和信息隐藏.ppt_第2页
第2页 / 共13页
类的封装性和信息隐藏.ppt_第3页
第3页 / 共13页
资源描述:

《类的封装性和信息隐藏.ppt》由会员分享,可在线阅读,更多相关《类的封装性和信息隐藏.ppt(13页珍藏版)》请在装配图网上搜索。

1、1/13 2021年 1月 24日星期日 面向对象方法 类的封装性 封装 ( encapsulation)是面向对象的三要素之一(其它 两个是 继承 和 多态 ),它有两层含义( p.39): 将 数据 (属性)和 函数 (行为)放在一个独立的类 中,使类成为一个独立的单元。 通过访问限定符( private等)实现对 信息的隐藏或 公开 ,隐藏类的内部实现。而留下一些 接口 ( public 的成员函数)与外界进行信息交换(外界要想访问某 个成员只能通过接口实现)。 2/13 2021年 1月 24日星期日 面向对象方法 当类的设计者改变了类的内部实现时,但只要接口不 变,对于类的使用者而言

2、,没有任何影响。这就是所谓 的“ 接口和实现的分离 ”( p.63)。 那么什么是封装?简单地说, 封装 就是将数据和函数 放在一起,将不想让外界看到的内容(通常是数据)声 明为 private的,不允许外界存取。外界要想访问的话, 只能通过类留给外部的接口。 3/13 2021年 1月 24日星期日 面向对象方法 类声明和类实现的分离 通常情况下常常将类的声明文件放在一个头文件( .h) 中,而将类的实现文件放在另一个文件实现( .cpp)中, 这样不同的使用者在使用这个类的时候只需在自己的程 序中将类的声明文件 #include进来即可( p.64,演示编写 日期管理程序 )。 使用 VC

3、编译器中的 classview查看类和 fileview查看文件。 使用 VC编译器的添加功能添加类和类的成员。 4/13 2021年 1月 24日星期日 面向对象方法 类的 SetXXX和 GetXXX 封装的一个原则是:“ 信息的最小化公开 ”,所以在 理想状态下,通常将 所有的数据都声明为 private(因为 随便对类的内部数据进行更改是很危险的),如果想改 变和得到某个数据的话,那么使用相应的接口进行访问 ( Effective C+:条款 18、条款 20)。 通常设置数据的接口命名为 SetXXX(如: void Date:SetYear(int y)),而将得到数据的接口称为

4、GetXXX(如: int Date:GetYear())。 5/13 2021年 1月 24日星期日 面向对象方法 成员的存储方式 考虑这样两个问题: 问题 1:使用 Date类来定义两个对象 d1和 d2,那么 d1和 d2两个对象在内存中的存储状态是否如 p.52-图 2.4中所示呢?即数据成员和成员函数是否都存放在 对象中呢? 问题 2: d1和 d2调用相同的成员函数,为什么显示 结果不一样?它们调用的是同一段代码吗? 6/13 2021年 1月 24日星期日 面向对象方法 其实上述两个问题实际上是一个问题:对象空间中仅 存储数据成员,而类的成员函数代码不会存储在对象中。 用一个类的

5、不同对象调用成员函数时,调用的是同一段 函数代码。 既然成员函数的代码不会存储在对象内部,那么它和 普通的函数除了形式上的区别,主要的区别是什么呢? 既然调用的是同一段代码,为什么显示不同的结果? 7/13 2021年 1月 24日星期日 面向对象方法 成员函数和普通函数的最主要区别 在编译器的角度来看,成员函数和普通函数是没有本 质区别的, 成员函数只不过是为了封装的需要,而在形 式上放在了类中 。它们之间除了前面讲的形式上的区别 外,最主要的区别如下: 成员函数 暗自 具备了一个从编译器传过来的指向类 对象的 this指针 。通过它成员函数可以操作对象的数 据成员。 8/13 2021年

6、1月 24日星期日 面向对象方法 this指针 this指针( p.87)!是不是听起来很神奇,而这个 this指 针恰恰是前面 问题 2(同一个类的不同对象调用同一成 员函数时,执行的是同一段代码,结果不同)的关键: Date d1,d2; if(d1.SetDate(-100,10,2) d1.ShowDate(); if(d2.SetDate(1999,10,1) d2.ShowDate(); 9/13 2021年 1月 24日星期日 面向对象方法 在上面的例子中,当调用成员函数时,系统会“ 偷偷 地 ”为成员函数传递一个指向当前对象的指针 this, 在这里 this相当于对象自己,如

7、下所示: d1.SetDate(-100,10,2) SetDate(this,-100,10,2);在 这里 this指向 d1,同理 d2.SetDate(1999,10,1) SetDate(this,1999,10,1);这里 this指向 d2。 形参 this的类型为 Date *。 10/13 2021年 1月 24日星期日 面向对象方法 指针 this的用途 在如下情况下,可以显示( explicit)的调用 this指针: bool Date:SetMonth(int month) if(month 0) return false; else if(month month =

8、 month; else return false; return true; 11/13 2021年 1月 24日星期日 面向对象方法 小结 什么是类?什么是对象?什么是抽象?什么是类的声 明?什么是类的定义? C+中有哪些权限限定符?各起什么作用? 什么是类的封装?封装的原则是什么? 同一各类所定义的不同对象在调用同一个成员函数时, 调用的是同一段代码吗? 类的成员函数和普通全局函数在形式上有什么区别?在 本质上有什么区别? 12/13 2021年 1月 24日星期日 面向对象方法 上机安排 设计并实现日期( Date)类,完成一个日期管理系统, 要求: private数据成员 year, month, day; 有 public接口 SetDate和 ShowDate,并对非法的 输入进行控制; 能够判断是否为闰年,是否为公元前 /后,并能 够正确显示; 实现 Date类的声明和实现的分离。 13/13 2021年 1月 24日星期日 面向对象方法 思考题 在日期管理程序中, Date类的成员函数 void Date:Init();的作用是初始化,它是 必须 被调用的,有了 它就可以防止程序员不设置日期,而直接显示日期。然 而程序员毕竟是人,也可能疏忽,那么 C+怎么解决这 类问题呢? 预习:下一章的构造函数,析构函数内容。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!