网站大量收购独家精品文档,联系QQ:2885784924

[工学]中科院C++课件chapter_3.pdf

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]中科院C课件chapter_3

第三章 类(class)及其对象 (object)的封装(encapsulation) ——数据及其操作的统一管理 3.1 封装性 封装可以解决数据与函数代码之间的相容性和数据的保护问题。 先看C 语言中不使用封装的例子。 [例1]不用封装的例子 // no_encapsul.cpp // The case of no capsulation #include iostream.h int sq_int(int a) { return a*a; } double sq_dbl(double a) { return a*a; } void main() { int j=5; double d=2.5; j = sq_int(j); d = sq_dbl(d); cout j endl; cout d endl; } /* Results: 25 6.25 */ 此程序比较简练(当然还可以再简练些),但它改变了j 和d 的值。 如果希望在不改变这两个值的情况下求出它们的平方值,则可以将主程 序修改如下,增加两个变量: void main() { int j=5, k; double d=2.5, f; k = sq_int(j); f = sq_dbl(d); cout k endl; cout f endl; } 以上程序中,虽然两个变量j 和d 没有改变,但其它函数仍有可能 修改这两个变量。如何保证需要修改时才修改,不准修改时就不修改。 这要依靠封装。 [例2]使用封装以便保护数据 // encapsul.cpp // The case of using capsulation to protect datum i (不是data) #include iostream.h class integ //用户建立一个类,用于封装 { int j; public: integ( ) { j = 6; } //构造函数 int sq() { return j*j; } //求平方函数 void inc() { j++; } //求增量函数 int read() { return j; } //读数据函数 }; void main() { int j; integ obj; //建立对象并初始化 cout obj.read() endl; //读数据 j = obj.sq( ); //求平方 cout j endl; //读平方值 obj.inc( ); //求增量 cout obj.read() endl; //读增量值 } /* Results: 6 36 7 */ 从以上程序看出,不允许外部函数(如主函数main( ) )等直接访问(读 取或修改)class integ 中的数据成员j ,而必须通过访问类class integ 的成员 函数read( ),才能读取j 。如需求其平方值,则须调用成员函数sq( ),但这 些函数仍然无法改变数据j 。如欲将数据加一,则须调用成员函数inc( ) 。 封装是指将对象的属性(attribute) (或称数据内容)和作用于这些属性上 的操作(operation) (或称函数、行为或服务)集合包装在一起,组成为一个 实体。 封装具有以下特点: 1. 用户无法访问所有私有数据和函数细节(即如何提供服务的细节, 也即函数定义)。 2. 用户只知道函数接口部分所提供的操作功能,根据这些操作功能来 调

文档评论(0)

ipbohn97 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档