C ++好友功能不起作用

时间:2013-07-20 14:53:00

标签: c++ class oop friend-function

我是C ++的新手,并且一直试图用c ++来解决这些问题。最近我尝试了这个程序,而不是返回一个整数9,它返回一些垃圾值。有人可以帮帮我吗

#include <iostream>
#include <cstring>
#include <math.h>
using namespace std;
class abc;
class xyz
{
    int a;
public:
    friend int add(xyz, abc);
    friend void setval(xyz, int, abc, int);


};
class abc
{
    int b;
public:
    friend int add(xyz, abc);
    friend void setval(xyz, int, abc, int);
};

int add(xyz V1, abc V2)
{ return (V1.a + V2.b);}
void setval(xyz v1, int v11, abc v2, int v22)
{v1.a = v11; v2.b = v22; }

int main()
{
    xyz A;
    abc B;
    setval(A, 4, B, 5);
    cout<<add(A, B)<<endl;
    return(0);
}

2 个答案:

答案 0 :(得分:3)

这种情况正在发生,因为您将参数传递给setval函数值,这将修改您传递的对象的副本。

请改用以下签名:

void setval(xyz& v1, int v11, abc& v2, int v22);

这样,您将发送对象的引用,而不是在某些单独的内存块中创建的对象的副本。因此,在主函数中创建的对象将被赋值。

答案 1 :(得分:1)

friend void setval(xyz, int, abc, int);

您的set函数将值设置为传递的对象的副本而不是传递的对象。你需要通过引用传递。

friend void setval(xyz &, int, abc &, int);
                   ^^^^^^      ^^^^^^ 

我不妨建议从一本好书开始:
The Definitive C++ Book Guide and List