使用友元功能和普通公共功能时的行为差异

时间:2016-11-27 22:21:05

标签: c++ friend

为什么我会在以下两种情况下获得不同的结果?在这两种情况下,我都是通过价值。

案例1:使用公共成员函数:(输出:2:1)

#include <iostream>
using namespace std;

class one {
  int hrs; int mins;
public:
  void in(int h, int m)
  { hrs = h; mins = m; }
  friend void dis(one);
};

void dis(one objone)
{ cout << objone.hrs <<":"<< objone.mins << endl; }

int main ()
{
  one obj1;
  obj1.in(2, 1);
  dis(obj1);
  return 0;
}

案例2:使用友方功能。 (输出:-20704:32763)

#include <iostream>
using namespace std;

class one
{
  int hrs; int mins;
  friend void in(one);
  friend void dis(one);
};

void in(one objone)
{ objone.hrs = 2; objone.mins=1; }

void dis(one objone)
{ cout << objone.hrs <<":"<< objone.mins << endl; }

int main ()
{
  one obj1;
  in(obj1);
  dis(obj1);
  return 0;
}

1 个答案:

答案 0 :(得分:1)

就像评论所说的那样,因为你传递了值,所以你没有将同一个对象传递给函数

In(one obj) 

将调用对象one的构造函数,因此不会初始化其内部成员。通过引用来解决您的问题

In(one & obj)