分析C++中友元实现数据共享

   在C++中,为什么要引入友元的概念呢?主要是为了实现数据共享,提高程序效率,方式就是避免过多的函数调用。请看以下实例:

#include<iostream.h>
#include<math.h>
class Point
{
public:
 Point(int xx,int yy)
 {
  X=xx;
  Y=yy;
 }
 int GetX()
 {
  return X;
 }
 int GetY()
 {
  return Y;
 }
 friend float fDist(Point &a,Point &b);//友元函数声明
private:
 int X,Y;
};
float fDist(Point &p1,Point &p2)
{
 double x = double(p1.X - p2.X);//外部函数可以访问类的私有成员
 double y = double(p1.Y - p2.Y);
 return float(sqrt(x*x+y*y));
}
void main()
{
 Point myp1(1,1),myp2(4,5);
 cout<<"The distance is:";
 cout<<fDist(myp1,myp2)<<endl;
}

    从上面代码可以看出,加入我们不使用友元函数,那么该函数就不能使用类里面的私有成员,这样就要调用大量的函数来获取该私有成员,如要获取p1,X,我们要调用GetX(),造成开销。但是如果私有成员结构如果发生变化,友元函数就要随着改变,如果程序比较大型,那改动也比较大,所以使用起来需要权衡好。

    以上是友元函数的情况,当然友元函数也可以在其他类中实现。下面介绍友元类。如在B类中声明A类为他的友元类,那么在B类的成员函数都可以访问A类中的所有私有和保护成员。如下列代码:

#include<iostream.h>
class A
{
 friend class B;//声明B是A的友元,B中可以使用A中所有属性

public:
 void Display()
 {
  cout<<x<<endl;
 }
 int Getx()
 {
  return x;
 }
private:
 int x;
};

class B
{
 
public:
 void Set(int i);
 void Display();
 
private:
  A a;
};
void B::Set(int i)
{
 a.x=i;//可以访问A中的私有成员
}

    最后2点需要注意的:

    一:友元关系是不能传递的。如B是A的友元类,C是B类的友元类,不能说明A和C有任何关系。

    二:友元关系是单向的, B是A的友元类不能说明A也是B的友元类。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值