- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章类(class)及其对象(object)的封装(encapsulation).doc
第三章 类(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 */
此程序比较简练(当然还可以再简练些),但它改变了i和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;
}
但其它函数仍有条件修改这两个变量。如何保证需要修改时才修改,不准修改时就不修改。这要依靠封装。
[例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)(函数、行为、服务)集合包装在一起,形成为一个实体。
封装具有以下特点:
用户无法访问所有私有数据和函数细节(即如何提供服务的细节,也即函数定义)。
用户只知道函数接口部分所提供的操作功能,根据这些操作功能来调用函数,从而访问私有数据。
3.2 类(class)及其对象(object)
3.2.1 C++类及其构成
在第一章§1.2.1“编程语言特征”中曾提到:客观世界的各事物可按其共性分为各个类(称为基类),这些类是具有相同共性的各事物的集合,它是面向对象语言中相对独立的程序单位,是这些事物的统一抽象。
在面向对象程序设计语言中,“类”是一组具有相同数据结构和相同操作(方法、函数)的集合,是对一系列具有相同性质的对象的抽象,它描述的不是个别对象而是全体对象的共同特征。
C++中,“类”被表达为一个具有特定功能的程序块。一个类具有两个成员部分:数据成员(data member)和成员函数(member functions)。其数据成员可以是各种预定义类型和用户自定义类型的数据。本章§3.1“封装性”的[例2]中已介绍过一个类class integ。可以看出,它的首部是关键词class加上类名,类的全部内容(称为类体(class body),包括数据和函数)都包含于花括号内,最后以分号结束。
由于用户能够在需要时生成新的类的类型(详见第四章),因此C++是可扩展语言(extensible l
文档评论(0)