Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Skedaddler
1 / 1 / 1
Регистрация: 24.02.2014
Сообщений: 13
#1

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

19.03.2014, 20:37. Просмотров 786. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2014, 20:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать файл для определения класса рациональных чисел с перегрузкой операторов (C++):

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

Составить описание класса для определения квадратных матриц целых чисел - C++
Реализация класса для работы с матрицами целых чисел. Задание: Составить описание класса для определения квадратных матриц целых...

Ошибка с перегрузкой операторов - C++
копилятор видимо тупит или я туплю или автор книги class countt{ public: int getvar()const{return itsvar;} void setvar(int...

Составить описание класса для определения одномерных массивов целых чисел (векторов) - C++
Здравствуйте, уважаемые программисты! Не так давно я начал изучать язык С++. Есть задание: Составить описание класса для определения...

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

Объясните работу кода с перегрузкой операторов - C++
Здравствуйте Код: #include &lt;iostream&gt; using namespace std; class A { public:

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

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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2014, 20:56
Привет! Вот еще темы с ответами:

Добавление и удаление объектов с перегрузкой операторов '+' и '-' - C++
У нас есть массив указателей на объекты, и нужно осуществить добавление и удаление объектов с помощью перегрузки оперторов '+' и '-'. ...

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

Проблемы с перегрузкой операторов файлового вводы/вывода - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; using namespace std; class Array{ int...

Нахождение квадрата числа с перегрузкой операторов и функций - C++
Нахождения квадрата числа. Программа на перегрузки операций , функций.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru