0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 5
1

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

15.04.2013, 12:57. Показов 754. Ответов 2
Метки нет (Все метки)

Требуется создать класс 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;
 
}
Помогите пожалуйста, завтра сдавать
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2013, 12:57
Ответы с готовыми решениями:

Помогите исправить ошибки в классе
Здравствуйте. Наконец то дописываю класс, но опять столкнулся с кое какими проблемами. Задание:...

Помогите исправить ошибки в классе
Здравствуйте. Помогите пожалуйста исправить ошибки. Их очень много, но они однотипные. Подскажите...

Нужно исправить ошибки в классе комплексных чисел
Мой мозг породил нечто ужасное к ночи, и оно не желает работать. Задание из рода &quot;Бред...

Исправить ошибки в классе "Список строк"
Построить класс СПИСОК СТРОК со свойствами: кол-во строк, динамический массив строк.Конструктор...

2
2017 / 1616 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
15.04.2013, 22:06 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 тоже не помешало бы сделать.
0
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 5
16.04.2013, 13:07  [ТС] 3
Спасибо огромное, а проверка деления на 0 (создание исключения) - это уже следующее задание, постараюсь сделать его сам
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2013, 13:07
Помогаю со студенческими работами здесь

Найти ошибки в коде и исправить эти ошибки (Наследование)
Вот в общем 3 файла, изучаю наследование на примере односвязного и двусвязного списков: list.h...

Найти ошибки в коде и исправить эти ошибки - C++
Судя по вываливающейся ошибки, идет двойное освобождение памяти. У самого не получается отловить...

Найти ошибки в коде и исправить эти ошибки
Есть у меня вот такой код: #include &lt;iostream&gt; using namespace std; class A{ private:...

Ошибки в шаблонном классе
Добрый день. Реализовал класс динамического массива. При проверке его работы столкнулся с ошибками,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru