2013-07-20 2 views
2

Я новичок в C++ и пытаюсь разглядеть классы в C++. Недавно я опробовал эту программу и вместо того, чтобы возвращать целое число 9, он возвращает некоторое значение мусора. Может кто-то пожалуйста, помогите мнеФункция друга C++ не работает

#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); 
} 
+1

Немного больно читать код..которые имена классов являются «xyz'..'abc' ... –

+0

@AnnieKim Я просто тестировал концепции, которые изучаю, поэтому просто случайный код не имеет никакой конкретной причины , –

+0

@ Sankalp благодарит за ответ, он решил проблему, я буду смотреть дальше на передачу значений по ссылке. –

ответ

3

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

Используйте следующую подпись вместо:

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

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

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

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

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

я могу также предлагаю начать с хорошей книгой:
The Definitive C++ Book Guide and List

Смежные вопросы