Siddharth Saurav - IIT [BHU] Ответов: 1

C++ основные сомнения относительно функции


#include<iostream> 
using namespace std;
class ComplexNum{
    //public:
    int a,b;
    public:
    void getData(){
        cin >> a >> b;
    }
    
    void getSum(ComplexNum n1, ComplexNum n2, ComplexNum n3){
        n3.a = n2.a + n1.a;
        n3.b = n2.b + n1.b; 
    }
    
 
    void display(){
        cout << "a = " <<a <<" " << "b = " <<b;}
};
int main(){
  ComplexNum n1, n2, n3;
  n1.getData();
  n2.getData();
  n3.getSum(n1,n2,n3);
  n3.display();
    return 0;
}
по моему мнению (возможно, я ошибаюсь), эта функция должна возвращать n3, который является векторной суммой n1 и n2, но она возвращает некоторое мусорное значение. Пожалуйста помочь

Что я уже пробовал:

я не знаю, что делать, чтобы решить эту проблему :|

1 Ответов

Рейтинг:
7

CPallini

Проблема заключается в том, что вы изменяете переданный объект ComplexNum по значению (то есть вызывающий код не увидит изменений). Вместо этого вы должны передать его по ссылке.
Изменить

Цитата:
void getSum(ComplexNum n1, ComplexNum n2, ComplexNum n3){
К
void getSum(const ComplexNum & n1, const ComplexNum & n2, ComplexNum & n3){
для того, чтобы исправить ваш код.



В любом случае вы также можете рассмотреть возможность перегрузки + оператор:
#include<iostream>
using namespace std;

class ComplexNum
{
  int a,b;
public:
  void getData()
  {
    cin >> a >> b;
  }

  friend ComplexNum  operator + (const ComplexNum &, const ComplexNum &);

  void display()
  {
        cout << "a = " <<a <<" " << "b = " <<b;
  }
};


ComplexNum operator + (const ComplexNum & c1, const ComplexNum & c2)
{
  ComplexNum r;
  r.a = c1.a + c2.a;
  r.b = c1.b + c2.b;
  return r;
}


int main()
{
  ComplexNum n1, n2, n3;
  n1.getData();
  n2.getData();
  n3 = n1 + n2;
  n3.display();

  return 0;
}


KarstenK

ComplexNum& operator + был бы идеален ;-)