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

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

Восстановить пароль Регистрация
 
Skedaddler
1 / 1 / 1
Регистрация: 24.02.2014
Сообщений: 13
19.03.2014, 20:37     Создать файл для определения класса рациональных чисел с перегрузкой операторов #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 " то же самое.
Буду благодарен не за написанный код, а за полезные советы и тыканье носом в элементарные ошибки. Задача-то простейшая, даже обидно, что возникли такие сложности.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2014, 20:37     Создать файл для определения класса рациональных чисел с перегрузкой операторов
Посмотрите здесь:

Проблема с абстрактными классами и перегрузкой операторов C++
первая ошибка с перегрузкой операторов C++
C++ Создание класса с перегрузкой операторов конструктор и деструктор
C++ Составить описание класса для определения квадратных матриц целых чисел
C++ перегрузкой операторов файлового вводы/вывода
Перегрузка операторов для класса "множество целых чисел" C++
C++ Создание шаблона с перегрузкой стандартных операторов
C++ Добавление и удаление объектов с перегрузкой операторов '+' и '-'

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
}
Yandex
Объявления
04.04.2014, 20:56     Создать файл для определения класса рациональных чисел с перегрузкой операторов
Ответ Создать тему
Опции темы

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