今天看了友员函数和成员函数区别

来源:互联网 发布:mac mini 固态硬盘 编辑:程序博客网 时间:2024/04/27 13:51

这是网络上说的最多的例子:

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

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

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;

}