класс — C ++ функция друга не работает

Я новичок в 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

Решение

Это происходит потому, что вы передаете аргументы setval функция по значению, которая будет изменять копию объекта, который вы передали.

Вместо этого используйте следующую подпись:

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

Таким образом, вы будете отправлять ссылку на ваши объекты вместо копий этих объектов, сделанных в отдельных блоках памяти. Таким образом, объектам, созданным в вашей основной функции, будут присвоены значения.

3

Другие решения

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

Ваши функции set устанавливают значение для копии переданного объекта, а не переданного объекта. Вам нужно пройти по ссылке.

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

С таким же успехом могу предложить начать с хорошей книги:
Полное руководство и список книг C ++

1

По вопросам рекламы [email protected]