C++类的数据共享

C++是目前应用广泛的一种面向对象程序 设计语言,它比较适合于编写大型复杂程序。它 所提供的数据共享机制具有广泛的代表性,能够 很好的解决程序设计中数据的共享。
1 使用局部变量和全局变量共享数据
使用局部变量能够在调用和被调用函数之问 通过参数传递实现不同函数块之问的数据共 享。局部变量具有局部作用域,能很好地实现 函数之间的数据隐蔽。但在传递过程中需要很大 的系统开销,故一般只用于传递少量的数据。 全局变量具有文件作用域。全局变量所存储 的数据在程序中任何地方都可以访问,能够在程 序中的所有函数之间实现数据共享。例如:
include< iostream.h >
int i;//定义i为全局变量
void f()
{i=8;}//在函数f中给全局变量赋值
void P()
{cout<< i<<endl;}//在函数P中输出全
局变量i
int main()
{
f();//调用函数f给全局变量赋值为“8”
P();//调用函数P输出全局变量值“8’’
return 0;}
使用全局变量实现共享数据相当方便,但其 副作用也相当大。因为全局变量无法对数据的访 问权进行有效控制。也就是说,我们很难知道程
序中数据在那些函数中共享,这样一旦共享的数 据发生结构性调整,也就很难判断它到底影响到 哪些函数,从而给程序维护带来相当大的困难。 这种共享方式,直接影响到数据安全、程序代码重 用和扩充。所以,在程序设计中,应可能少的使用 这种共享方式。 
2 通过类的数据成员共享数据
C++中类内部封装的数据成员提供了同一 类的函数成员之间进行数据共享机制 j。这种共 享方式一方面实现了类内部函数的全面共享,同 时也提供了通过设置适当的访问控制属性,把共 享只限制在类的范围之内,这样对类外来说,类的 数据成员仍是隐藏的,达到了共享与隐藏两全,解 决了全局变量和局部变量所无法克服的矛盾。例 如:一个时钟类,该类中封装了私有数据成员有 Hour,Minute,Second,在类的成员函数之间实现数 据共享。在类外面,对它们的访问只能通过类 自身提供的外部接口进行,无法直接访问。
Class Clock//时钟类的声明
{
public://#b部接口,公有数据成员函数
void SetTime(int NewH =0,int NewM =0,int
News=0);
void ShowTime();
private://私有数据成员 .
int Hour,Minute,Second;//在类的成员函数
之间共享
};
3 通过类的静态成员实现数据共
C++中使用静态成员可以实现同一类的不 同对象之间共享数据 j。类的普通数据成员在类 的每一个对象都有一个拷贝,就是说每个对象的 同名数据成员可以分别存储不同数值,这就保证 对象拥有自身区别其他对象的特征的需要。静态 数据成员是类的数据成员的一种特例,采用static 关键字来声明;每个类只有一个拷贝,由该类的所 有对象共同维护和使用,从而实现了同一类的不 同对象之间的数据共享。例如 有一学生类:
class student
{
private:
im ID :
char nalne;
static count;//静态数据成员,用来存放”人
//其他数据成员与函数成员略
}
如果程序中需要统计学生人数,这个数据存 放在什么地方呢?若以类外的全局变量来存放, 不能实现数据的隐藏,若在类中增加一个数据成 员用以存放人数,必然在每一个对象中都存储一 副本,这样不仅冗余,而且每个对象分别维护一个 “人数”,势必造成数据的不一致性。因此,比较 好的方案是student类中增加一个静态数据成员 static count用来存放学生“人数”。
4 通过友元机制共享数据
在一个类中,可以利用关键字friend将别的模 块(一般函数、其他类的成员函数或其他类)声明 为它的友元,这样这个类中本来隐藏的信息就可 以被友元访问。如果友元是一般函数或类的成 员函数,称为友元函数;如果友元是一个类,则称 为友元类,友元类的所有成员函数都成为友元函 数。例如:
class B
{. //B类的成员声明
friend float f(B&x,B&y);//友元函数声明
friend class A;//声明A为B的友元类
};
在B类声明f函数为友元函数,则在f函数中 通过对象名可直接访问B类所有的数据成员。同 时在B类声明A类为友元类,则A类的所有成员 函数都是B类的友元函数,都可以访问B类的私 有和保护成员。采用友元类共享数据机制,使友 元类成员函数可以通过对象名直接访问到隐藏的 数据,从而使程序达到高效协调工作。在较为复 杂的问题中,实现不同类之间的数据共享,友元类 的使用也是必不可少的选择。 友元在类之间、类与普通函数之间共享了内 部封装的数据的同时,必然会对类的封装性带来 一定的破坏。因此在程序设计中使用友元,要在 共享和封装之间找到一个恰当的平衡点,从而达 到提高程序效率同时,将程序隐患降来最低。
5 结束语
在大型程序设计中数据共享问题是一个复杂 的综合性问题。设计过程中既要实现数据共享, 又要保证共享数据的安全。这就要求程序设计人 员必须充分了解各种实现机制的运行场合,熟知 运用它们所带来的利与弊,这样才能恰到好处地 运用这些机制,设计出高质量程序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值