C++ 友元函数不起作用

标签 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);
}

最佳答案

发生这种情况是因为您按值将参数传递给 setval 函数,这将修改您传递的对象的拷贝。

请改用以下签名:

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

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

关于C++ 友元函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17763433/

相关文章:

c++ - UVC 相机 "Still Pin"在 Linux C++ 中捕获

c++ - 带有 Win32 HWND 嵌入的 Qt5 QWidget::create() 在从 Qt4 移植后不再工作

c++ - 初始化派生类的安全方法

java - 代码返回节点而不是子类的值

model-view-controller - "passive"对象是否被视为良好的设计实践?

C++:使用 RAII 解决构造函数初始值设定项列表依赖关系

c++ - 创建使用运算符的 C++ 类

c++ - 创建一个可以访问类实例的唯一 ID 的运算符

actionscript-3 - 为什么 actionscript 3.0 类层次结构失败(有时)?

php - 具有多个参数的一种方法还是具有一个参数的多种方法?