Форум программистов, компьютерный форум CyberForum.ru

Исправить ошибки в классе Fraction - C++

Восстановить пароль Регистрация
 
SleeperHD
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 5
15.04.2013, 12:57     Исправить ошибки в классе Fraction #1
Требуется создать класс Fraction с двумя закрытыми переменными: числитель и знаменатель дроби (целые числа). Написать методы:
1. Конструктор без параметров
2. Перегрузите оператор =.
3. Перегрузите операторы - и / для сложения и умножения дробей.
4. Организуйте ввод и вывод дроби, перегрузив операторы << и >> для потокового ввода/вывода.
Используя класс Fraction написать программу, которая запрашивает у пользователя две обыкновенные дроби, вычисляет их разность и частное и выводит результаты на консоль.

В общем то все это я сделал, но при делении программа делит результат разности на вторую дробь, в чем проблема - никак не разберусь. Также требуется содержать это все в трех файлах: функция main, сам класс с прототипами методов, файл с описанием методов и операторов.

1) main
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "Fraction.h"
int main()
{
    setlocale (LC_ALL, "Russian");
    Fraction a,b;
    cout << "Введите дробь 1:"; 
    cin>>a;
    cout << "Введите дробь 2:";
    cin>>b;
    cout<<"Разность: "<<a-b<<endl;
    cout<<"Частное: " <<a/b<<endl;
}
2) класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma once
#include <iostream>
using namespace std;
class Fraction
{
private: int n,d;
public:
    
    Fraction();
    Fraction& operator=(Fraction& x);
    Fraction& operator-(Fraction& v);
    Fraction& operator/(Fraction& u);
    friend ostream& operator << (ostream& out, Fraction &f);
    friend istream& operator >> (istream& in, Fraction &f);
};
3) методы и операторы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "Fraction.h"
 
 
Fraction::Fraction(): n(0),d(0) {}
Fraction& Fraction::operator=(Fraction& x)
{
n = x.n;
d = x.d;
return *this;
}
Fraction& Fraction::operator-(Fraction& v)
 {
    
n= n*v.d-d*v.n;
d= d*v.d;
return *this;
 
}
 Fraction operator-(Fraction& n,Fraction& d)
{
    return Fraction(n) - d; 
};
 Fraction& Fraction::operator/(Fraction& u)
  {
      n=n*u.d;
      d=d*u.n;
      return *this;
  }
  Fraction operator/(Fraction& n,Fraction& d)
{
    return Fraction(n) / d; 
};
    ostream& operator << (ostream& out, Fraction &f)
{
out<<f.n<<'/'<<f.d;
return out;
}
    istream& operator >> (istream& in, Fraction &f)
{
char ch;
in>>f.n>>ch>>f.d;
return in;
 
}
Помогите пожалуйста, завтра сдавать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2013, 12:57     Исправить ошибки в классе Fraction
Посмотрите здесь:

Помогите исправить ошибки в классе C++
Помогите исправить ошибки в классе C++
C++ Не работает операция сложения в классе. Исправить код
C++ Исправить ошибки
лезут ошибки в классе, не могу разобраться C++
C++ Нужно исправить ошибки в классе комплексных чисел
C++ Найти ошибки в шаблонном классе
Конструктор в классе-наследнике не выполняется. Подскажите как исправить? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
15.04.2013, 22:06     Исправить ошибки в классе Fraction #2
Fraction::Fraction(): n(0),d(0) {}
Исправьте знаменатель на 1(на 0 делить нельзя).
Fraction& operator=(Fraction& x);
Fraction& operator-(Fraction& v);
Fraction& operator/(Fraction& u);
friend ostream& operator << (ostream& out, Fraction &f);
friend istream& operator >> (istream& in, Fraction &f);
C++
1
2
3
4
5
Fraction& operator=(const Fraction& x);
Fraction  operator-(const Fraction& v) const;
Fraction  operator/(const Fraction& u) const;
friend std::ostream& operator << (std::ostream& out, const Fraction& f);
friend std::istream& operator >> (std::istream& in, Fraction& f);
Операторы - и / должны возвращать временный объект, а не менять данные того объекта, который их вызывает(как это сделано у вас), например:
C++
1
2
3
4
5
6
7
Fraction Fraction::operator-(const Fraction& v) const
{
    Fraction t;           // временный объект
    t.n = n*v.d-d*v.n;
    t.d = d*v.d;
    return t;
}
Fraction operator-(Fraction& n,Fraction& d)
Fraction operator/(Fraction& n,Fraction& d)
Это не нужно.

Добавлено через 1 минуту
Ну и проверку деления на 0 тоже не помешало бы сделать.
SleeperHD
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 5
16.04.2013, 13:07  [ТС]     Исправить ошибки в классе Fraction #3
Спасибо огромное, а проверка деления на 0 (создание исключения) - это уже следующее задание, постараюсь сделать его сам
Yandex
Объявления
16.04.2013, 13:07     Исправить ошибки в классе Fraction
Ответ Создать тему
Опции темы

Текущее время: 08:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru