c++ - 使用友元函数和普通公共(public)函数时的行为差异

标签 c++ friend

为什么我在以下两种情况下会得到不同的结果?在这两种情况下,我都按值(value)传递。

案例 1:使用公共(public)成员函数:(输出: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;
}

最佳答案

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

In(one obj) 

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

In(one & obj)

关于c++ - 使用友元函数和普通公共(public)函数时的行为差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40834606/

相关文章:

c++ - 我的动态数组在 free() 时有 SIGSEGV,但可以访问吗?

c++ - 删除向上转换为基指针的对象数组

c++ - 使用 glDrawPixels 时将图片上下颠倒

javascript - Node.js >= 0.12.* C++ 插件实例化返回回调

C++ 创建一个存储不同类型名称的 vector

c++ - 将 auto_ptr 设为友元类

c++ - 使用模板将一组成员函数声明为友元

java - Java中类C++的友元类机制

c++ - 为什么这个私有(private)构造函数对其友元无法访问

c++ - 使成员函数成为 friend