关于友员函数的低级错误

  “类的友员函数可以直接访问该类的所有成员,但它不是成员函数,可以象普通函数一样在任何地方被调用”

    这样看上去,友员函数与成员函数的区别就仅仅在于友员函数可以在任何地方被调用,于是我写了下面的代码:

class CDemo
{
 private:
   int m_a;
  
 public:
  friend void ShowMsg(void);
  int Get_m_a() const;
  
  void Set_m_a(int a);
  
};

void ShowMsg(void)

{

     cout << "m_a=" <<m_a <<endl;

}

....................

无法通过编译,显示m_a没有定义。

看看这几句话:

3)友元函数不能直接访问类的成员,只能访问对象成员,
4)
友元函数可以访问对象的私有成员,但普通函数不行;
5)
调用友元函数时,在实际参数中需要指出要访问的对象,

看来,友员函数与成员函数的区别不只是调用规则不同,友员函数需要传其本类对象的参数,与其他非友员非成员函数相比,它多了可以直接:对象.私有数据  的功能

修改后的代码运行正常;

class CDemo
{
 private:
   int m_a;
  
 public:
  friend void ShowMsg(CDemo &demo);
  int Get_m_a() const;
  
  void Set_m_a(int a);
  
};

 

void ShowMsg(CDemo  &demo)

{

     cout << "m_a=" <<demo.m_a <<endl;

}

.................

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值