为什么我在以下两种情况下会得到不同的结果?在这两种情况下,我都按值(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/