Пользовательский ввод C++ при инициализации значений

Я учусь на вводном курсе C++. Для одного из наших прошлых заданий нам пришлось создать простую программу для сложения дробей. Каждая новая лаборатория — это просто применение новых навыков, полученных при создании одной и той же программы. Теперь мне нужно сделать его, используя объекты из определения класса.

После работы с примером умножения, который дал нам мой профессор, я, наконец, получил код для правильного сложения дробей.

#include <iostream>
using namespace std;

class Fraction
{
private:
  float numer;
  float denom;

public:
  void Init(float n, float d);
  void Multi(Fraction *, Fraction *);
  void Print();
  Fraction() 
  {
     numer = 0.0;
     denom = 0.0;
  }
  void setNumer( float n ) { numer = n; }
  void setDenom( float d ) { denom = d; }
  float getNumer() { return numer; }
  float getDenom() { return denom; }
};

main()
{
  Fraction x;
  Fraction y;
  Fraction f;

  x.Init( 1.0, 4.0 );
  y.Init( 3.0, 4.0 );
  f.Init( 0.0, 0.0 );

  f.Multi( &x, &y );

  x.Print();
  y.Print();
  f.Print();
}

void Fraction::Init(float n, float d)
{
  numer = n;
  denom = d;
}
void Fraction::Multi(Fraction *x, Fraction *y)
{
  numer = ( x->numer*y->denom) + (x->denom*y->numer);
  denom = ( x->denom*y->denom);
}
void Fraction::Print()
{
  cout << "Fraction:" << endl;
  cout << "  Numerator: " << numer << endl;
  cout << "  Denominator: " << denom << endl;
}

Stackoverflow отрезал мой код. :/ (Не совсем понимаю, почему. Я новичок на сайте)

В любом случае, что я действительно хотел бы сделать, так это настроить эту программу так, чтобы она могла принимать пользовательские данные о том, какими будут дроби x и y. В своих прошлых заданиях я использовал только команды cin и cout, но теперь понятия не имею, что делать. Как только я это понимаю, я знаю, что могу заставить его правильно уменьшить дроби и правильно отобразить, но я понятия не имею, как заставить его принимать входные данные.

У кого-нибудь есть предложения? (Или еще лучше, если вы можете направить меня на сайт с дополнительной информацией, такой как cplusplus.com, я был бы очень признателен!)


person AdamY    schedule 01.07.2010    source источник


Ответы (2)


Переименование вашего Multi метода в Add позволит избежать путаницы и настоятельно рекомендуется.

Что касается ввода, что не так, например, с (например) std::cin >> numer >> denomnumer и denom объявленными как целые числа)? Затем, конечно, вы можете передать их методу Init и т. д. (Возможно, вы также захотите сделать запрос на std::cout перед чтением пользовательского ввода, естественно).

person Alex Martelli    schedule 01.07.2010
comment
Во-первых, я хотел бы поблагодарить вас за невероятно быстрый ответ. В течение пары минут после публикации и последующей проверки я пробовал команды cin и cout, и они работали нормально. XD Раньше у меня было много проблем. Я также изменил Multi на Add. Большое спасибо. - person AdamY; 01.07.2010

У вас есть несколько вариантов, прочитать из cin и инициализировать:

float n, d;
cout << "Enter numerator: " << endl;
cin >> n;
cout << "Enter denominator: " << endl;
cin >> d;

x.Init(n, d);

Другой, более сложный вариант — разрешить прямой доступ к членам числителя и знаменателя (это не будет работать с вашей функцией Init):

class Fraction {
 public:
  // other stuff ... 
  float &numerator() { return numer; }
  float &denominator() { return denom; }
  /// other stuff ...
}

cout << "Enter numerator: " << endl;
cin >> x.numerator();
cout << "Enter denominator: " << endl;
cin >> x.denominator();
person Stephen    schedule 01.07.2010