Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
2 / 2 / 2
Регистрация: 24.02.2014
Сообщений: 13

Создать файл для определения класса рациональных чисел с перегрузкой операторов

19.03.2014, 20:37. Показов 2782. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Нужно создать файл для определения класса рациональных чисел с перегрузкой операторов. Ввиду своей криворукости имею множество вопросов.
Вот код (простите за кривость и недоделанность)
Кликните здесь для просмотра всего текста

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#ifndef _RATIO_H_
#define _RATIO_H_
 
class Ratio
{   
    int num; // Числитель
    int den; // Знаменатель
    friend ostream& operator <<(ostream& outs, const Ratio&); // Перегрузка ввода
    friend istream& operator >>(istream& ins, const Ratio&);  // Перегрузка вывода
    int invert (int, int); // Меняет местами числитель и знаменатель
    int gcd (int, int); // Находит наибольший общий делитель
    int reduce (int, int, int); // Сокращает дробь
    explicit Ratio.den = 0; 
public:
    Ratio () {num = 0; den = 1;};
    Ratio operator* (const Ratio&x) const; // Оператор умножения дробей
    Ratio operator/ (const Ratio&x) const; // Оператор деления дробей
    Ratio operator= (const Ratio &src); // Присваивание
    Ratio operator*= (const Ratio&x) const; // Умножение
    Ratio operator/= (const Ratio&x) const; // Деление
    Ratio operator== (const Ratio&x, const Ratio&y); // Эквивалентность
    Ratio operator!= (const Ratio&x, const Ratio&y); // Не тождественность
    Ratio operator int() const; // Целые числа
    Ratio operator double() const; // Числа с плавающей запятой
    void Ratio.show();  // Вывод
    ~Ratio() {}; // Деструктор    
}
#endif
 
Ratio& operator* (const Ratio&x) const // Оператор умножения дробей
{
    Ratio result (num * x.num, den * x.den); // (a/b)*(c/d)=(ac/bd)
    return result;
}
 
Ratio& operator/ (const Ratio&x) const //Оператор деления дробей
{
    Ratio result (den * x.num, num * x.den); // (a/b)/(c/d)=(a/b)*(d/c)=(ad/bc)
    return result;
}
 
Ratio& operator= (const Ratio &src) // Присваивание
{
    if(&src == this) return *this;
    num = src.num;
    den = src.den;
    return *this;
}
 
Ratio& operator*= (const Ratio&x) const // Умножение
{
    num *= x.num;
    den *= x.den;
    return *this;
}
 
Ratio& operator/= (const Ratio&x) const // Деление
{
    num /= x.num;
    den /= x.den;
    return *this;
}
 
Ratio& operator== (const Raito&x, const Ratio&y) // Эквивалентность
{
    return ((num == x.num) && (den = x.den));
}
 
Ratio& operator!= (const Ratio&x, const Ratio&y) // Не тождественность
{
    ///
}
    
Ratio& operator int() const // Целые числа
{
    return int(num)/den;
}
 
Ratio& operator double() const // Числа с плавающей запятой
{
    return double(num)/den;
}
 
void Ratio.show() // Вывод
{
    cout<<num<<"/"<<den<<endl;
}
 
int invert (int, int) // Меняет местами числитель и знаменатель
{
    int temp = num;
    num = den;
    den = temp;
}

Ошибки следующие:
  • "IntelliSense: variable "Ratio" is not a type name" практически для каждого оператора.
  • "IntelliSense: nonmember operator requires a parameter with class or enum type"
  • "IntelliSense: identifier "Raito" is undefined"
  • "IntelliSense: expected a declaration" также почти для каждого оператора.
  • "IntelliSense: a type qualifier is not allowed on a nonmember function " то же самое.
Буду благодарен не за написанный код, а за полезные советы и тыканье носом в элементарные ошибки. Задача-то простейшая, даже обидно, что возникли такие сложности.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.03.2014, 20:37
Ответы с готовыми решениями:

Шаблон класса дата с перегрузкой операторов
Ребят, не могу найти на форуме каких-либо разработок по такой задаче, как: Разработать шаблон класс &quot;Дата&quot; с полями число,...

Создание класса с перегрузкой операторов конструктор и деструктор
Создать класс времени (Time) содержащий закрытую переменную-член хранящую целое значение времени интервала в секундах. Интерфейс класса...

Создать класс "Полином" с перегрузкой операторов
Помимо функций, указанных в задании, включить в реализацию класса конструкторы всех типов, функции ввода-вывода. Необходимо также...

1
2 / 2 / 2
Регистрация: 24.02.2014
Сообщений: 13
04.04.2014, 20:56  [ТС]
Более менее разобрался, вот код (может, кому понадобится)
Кликните здесь для просмотра всего текста

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
// Ratio.cpp : Класс рациональных чисел со своими методами и перегрузкой операторов.
// 2014 год.
 
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
 
using namespace std;
class Ratio
{   
    int num; // Числитель (numerator)
    int den; // Знаменатель (denominator)
    
    /* Методы класса */
    int gcd (); // Находит наибольший общий делитель
    
    
public:
    Ratio() {den = 1; num = 0;}
    explicit Ratio (int n, int d) : num(n), den(d) {} // Конструктор с параметрами 
    Ratio (const Ratio &src) : num(src.num), den(src.den) {} // Конструктор копирования
 
    /* Перегрузка операторов */
    Ratio operator* (const Ratio&x) const; // Оператор умножения дробей
    Ratio operator/ (const Ratio&x) const; // Оператор деления дробей
    Ratio& operator= (const Ratio &src); // Оператор присваивания
    Ratio& operator*= (const Ratio&x); // Оператор умножения
    Ratio& operator/= (const Ratio&x); // Оператор деления
    friend ostream& operator<< (ostream& outs, const Ratio &x); // Перегрузка ввода
        friend istream& operator>> (istream& ins, Ratio &x);  // Перегрузка вывода
    bool operator== (const Ratio&x) const; // Оператор эквивалентности
    bool operator!= (const Ratio&x) const; // Оператор не тождественности
    operator int() const; // Предаставление дроби как целого числа
    operator double() const; // Предаставление дроби как числа с плавающей запятой
    
    /* Методы */
    void invert (); // Меняет местами числитель и знаменатель
    void reduce (); // Сокращает дробь
    ~Ratio() {}; // Деструктор    
};
 
 
Ratio Ratio::operator* (const Ratio&x) const // Оператор умножения дробей
{
    Ratio result (num * x.num, den * x.den); // (a/b)*(c/d)=(ac/bd)
    return result;
}
 
Ratio Ratio::operator/ (const Ratio&x) const //Оператор деления дробей
{
    Ratio result (den * x.num, num * x.den); // (a/b)/(c/d)=(a/b)*(d/c)=(ad/bc)
    return result;
}
 
Ratio& Ratio::operator= (const Ratio &src) // Присваивание
{
    if(&src == this) return *this;
    num = src.num;
    den = src.den;
    return *this;
}
 
Ratio& Ratio::operator*= (const Ratio &x) // Умножение
{
    num *= x.num;
    den *= x.den;
    return *this;
}
 
Ratio& Ratio::operator/= (const Ratio&x) // Деление
{
    num *= x.den;
    den *= x.num;
    return *this;
}
 
ostream& operator<< (ostream& outs, const Ratio &x) // Вывод
{
    outs << x.num << '/' << x.den << endl;
    return outs; // Состояние потока
}
 
istream& operator>> (istream &ins, Ratio &x) // Ввод
{
    int n, d = 1; 
    char c;
    ins >> n >> c;
    if (c == '/') ins >> d;
    x.num = n;
    x.den = d;
    return ins; // Состояние потока
}
 
bool Ratio::operator== (const Ratio&x) const // Эквивалентность
{
    return ((num == x.num) && (den == x.den));
}
 
bool Ratio::operator!= (const Ratio&x) const // Не тождественность
{
    return !operator == (x);    
}
    
Ratio::operator int() const // Целые числа
{
    return num/den;
}
 
Ratio::operator double() const // Числа с плавающей запятой
{
    return double(num)/den;
}
 
int Ratio::gcd () // Ищет наибольший общий делитель
{
    int i, od, max, min; // Счетчик и делитель
    max = (num > den) ? num : den;
    min = (num < den) ? num : den;
    for (i = 1; i == min; i++)
    {
        if (max % i == 0 && min % i == 0) od = i; // Если оба числа делятся без остатка, od равен этому числу
    }
    return od;
}
 
void Ratio::reduce() // Сокращение дроби
{
    int temp = gcd();
    num /= temp;
    den /= temp;
}
 
void Ratio::invert () // Меняет местами числитель и знаменатель
{
    int temp = num;
    num = den;
    den = temp;
}
    
int main () // Здесь будут продемонстрированы все возможности класса
{
    Ratio a, b, c; // Рациональные числа
    char ex; // Для выхода из программы
    int temp; // Временная переменная
    
    cout << "Рациональные числа вводите в форме x/y\n" << "Введите первое число (a): ";
    cin >> a;
    cout << "Введите второе число (b): ";
    cin >> b;
    
    // Проверка операторов
    //с = a * b;
    c(5,7);
    cout << "Умножение a*b: " << c;
    c = a / b;
    c.reduce();
    cout << "Деление этого числа (с) на b: " << c;
    c *= a;
    c.reduce();
    cout << "Умножение c на a (c*=a): " << c;
    c /= a;
    c.reduce();
    cout << "Деление c на a (c/=a): " << c;
    if (c == a) temp = 1; else temp = 0;
    cout << "Если с = a, выводится 1" << temp << endl;
    if (c != b) temp = 1; else temp = 0;
    cout << "Если c не равно b, выводится 1: " << temp << endl;
    double temp1 = double (c);
    cout << "Представление c как десятичной дроби: " << temp1 << endl;
    temp = int (a);
    cout << "Представление a как целого числа: " << temp << endl;    
    b.invert ();
    cout << "Инвертирование дроби b: " << b;
 
    cout << "Press q to quit: ";
    cin >> ex;
    if (ex == 'q' || ex == 'Q') exit;
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.04.2014, 20:56
Помогаю со студенческими работами здесь

Создать класс "деньги" с перегрузкой операторов
Создать класс деньги поля- гривны, копейки 2 конструктора перегрузить операторы: деньги+деньги деньги-деньги деньги*int ...

Проконсультируйте по коду класса дробей-рациональных чисел
Здравствуйте, дали мне задачку - описать класс дробей. Полное условие: Описать класс дробей-рациональных чисел, являющихся отношением...

Реализовать перегрузку заданных операторов для пользовательского класса комплексных чисел
Нужно добавить операторы перегрузки для комплексных чисел, но я что-то вообще не догоняю как это сделать. На пикче полное задание. я...

Создать класс, реализующий перегрузку операторов, разработать оконное приложение для работы с методами класса
Помоготите кто может)))пожалуйста) Цель работы: Познакомиться с принципами перегрузки операторов в ЯП С#. Создать класс, реализующий...

Создать описаниее класса для определения одномерных масивов строчек фиксированной длины
В интернете была найдена прога, я ее исправила , но теперь неправильно выводит массив :cry::boredom: #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru