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

Дописать к классу Fraction конструктор по умолчанию - C++

Восстановить пароль Регистрация
 
masyk
1 / 1 / 0
Регистрация: 20.10.2012
Сообщений: 34
22.04.2013, 23:11     Дописать к классу Fraction конструктор по умолчанию #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
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
#include <cstdlib>
#include <iostream>
#include <exception>
using namespace std;
class Fraction 
{
public:
    Fraction();
    Fraction(int);
    Fraction(int, unsigned int);
    
    const Fraction& operator -= (const Fraction&);
    const Fraction& operator *= (const Fraction&);
    
 
    
    friend ostream& operator << (ostream&, const Fraction&);
    friend istream& operator >> (istream&, Fraction&);
    
  
    private:
    
    unsigned int get_gcd(int, int) const;
    void reduce();
    
    unsigned int den;
    int num;
};
 
Fraction::Fraction() :
    den(1), num()
{
}
 
Fraction::Fraction(int value) :
    num(value), den(1)
{
}
 
 
 
void Fraction::reduce()
{
    int gcd = get_gcd(num >= 0 ? num : - num, static_cast<int>(den));
    den /= gcd;
    num /= gcd;
}
 
unsigned int Fraction::get_gcd(int a, int b) const
{
    if (!a)
        return b;
    if (!b)
        return a;
    return a > b ? get_gcd(a % b, b) : get_gcd(b % a, a);
}
 
ostream& operator << (ostream& stream, const Fraction& instance)
{
    stream << instance.num << (instance.den != 1 ? "/" : "");
    if (instance.den != 1)
        stream << instance.den;
    return stream;
}
 
 
 
const Fraction& Fraction::operator -= (const Fraction& instance)
{
    num = num * static_cast<int>(instance.den) - instance.num * static_cast<int>(den);
    den *= instance.den;
    reduce();
    return *this;
}
 
const Fraction& Fraction::operator *= (const Fraction& instance)
{
    num *= instance.num;
    den *= instance.den;
    reduce();
    return *this;
}
 
 
Fraction operator - (const Fraction& a, const Fraction& b) 
{
    return Fraction(a) -= b; 
}
 
Fraction operator * (const Fraction& a, const Fraction& b) 
{
    return Fraction(a) *= b; 
}
 
 
 
istream& operator >> (std::istream& stream, Fraction& instance)
{
    stream >> instance.num >> instance.den;
    if (!instance.den)
        throw std::exception();
    instance.reduce();
    return stream;
}
 
 
int main()
{
    Fraction f1, f2;
    char c;
    setlocale(LC_ALL, "Russian");
 
    bool next = true;
    while (next)
    {
   
            cout << "Введите дробь 1" << std::endl;
            cin >> f1;
            
            cout << "Введите операцию" << std::endl;
            cin >> c;
            
            cout << "Введите дробь 2" << std::endl;
           cin >> f2;
    
        
        switch (c)
        {
            
        case '-':
            cout << " Ответ: " << (f1 - f2) << endl << endl;
            break;
            
        case '*':
            cout << " Ответ: " << (f1 * f2) << endl << endl;
            break;
            
        default:
            next = false;
        }
        
        cout << "Вы хотите произвести еще одну операцию? (y / n)" << endl;
       cin >> c;
        if (c == 'n')
            next = false;
    }
    
    system("Pause");
    return EXIT_SUCCESS;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2013, 23:11     Дописать к классу Fraction конструктор по умолчанию
Посмотрите здесь:

C++ Как создать объект класса с двумя параметрами?
C++ Конструктор по умолчанию
C++ Конструктор по умолчанию
C++ Конструктор по умолчанию
C++ Конструктор по умолчанию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,021
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 23:38     Дописать к классу Fraction конструктор по умолчанию #2
Я могу, мысленно..
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
22.04.2013, 23:42     Дописать к классу Fraction конструктор по умолчанию #3
Цитата Сообщение от masyk Посмотреть сообщение
копирования и деструктор
Не нужны, ибо - они не нужны.

Добавлено через 39 секунд
Цитата Сообщение от masyk Посмотреть сообщение
дописать к классу конструктор
А самому? Два уже есть, осталось написать еще один. Неее?
masyk
1 / 1 / 0
Регистрация: 20.10.2012
Сообщений: 34
22.04.2013, 23:43  [ТС]     Дописать к классу Fraction конструктор по умолчанию #4
или например розьяснить что ето
C++
1
2
3
 Fraction();
    Fraction(int);
    Fraction(int, unsigned int);
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
 private:
    
    unsigned int get_gcd(int, int) const;
    void reduce();
    
    unsigned int den;
    int num;
};
 
Fraction::Fraction() :
    den(1), num()
{
}
 
Fraction::Fraction(int value) :
    num(value), den(1)
{
}
 
 
 
void Fraction::reduce()
{
    int gcd = get_gcd(num >= 0 ? num : - num, static_cast<int>(den));
    den /= gcd;
    num /= gcd;
}
 
unsigned int Fraction::get_gcd(int a, int b) const
{
    if (!a)
        return b;
    if (!b)
        return a;
    return a > b ? get_gcd(a % b, b) : get_gcd(b % a, a);
}
немогу полностью розобратса в коде!!прокоментируйте плис
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,021
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 23:44     Дописать к классу Fraction конструктор по умолчанию #5
Цитата Сообщение от nonedark2008 Посмотреть сообщение
А самому? Два уже есть, осталось написать еще один. Неее?
Скажи мне, я ничего не путаю? http://ru.wikipedia.org/wiki/%D0%9A%...BD%D0%B8%D1%8E
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
22.04.2013, 23:49     Дописать к классу Fraction конструктор по умолчанию #6
Цитата Сообщение от lazybiz Посмотреть сообщение
Скажи мне, я ничего не путаю?
Эмм, я пока не понимаю, что ты собираешься путать, и что мне нужно сказать...
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,021
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 23:52     Дописать к классу Fraction конструктор по умолчанию #7
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Эмм, я пока не понимаю, что ты собираешься путать, и что мне нужно сказать...
Либо я туплю под вечер, либо одно из двух.. Разве конструктор по-умолчанию это не то что компилятор создает сам?
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
22.04.2013, 23:56     Дописать к классу Fraction конструктор по умолчанию #8
Цитата Сообщение от masyk Посмотреть сообщение
или например розьяснить что ето
Эмм. Если ВСЕ не понятно, то объяснять слишком долго. Возьми книжицу по C++ и почитай. Там будет все, что нужно: и классы, и конструкторы, и деструктор, и перегрузка операторов.
А потом можно открыть книжицу с алгоритмами и узнать как сокращать дроби, что такое GCD и т.д.
Кстати, метод "Я тут что-то скопировал - объясните что это такое" не поможет в понимании языка.

Добавлено через 3 минуты
Цитата Сообщение от lazybiz Посмотреть сообщение
Разве конструктор по-умолчанию это не то что компилятор создает сам?
В C++, если нет никаких других конструкторов, то компилятор вставляет свои конструкторы копирования и по умолчанию, которые ничего не делают.
А так, пользователь может сам задать конструктор по умолчанию(ака конструктор без аргументов), который делает то что ему нужно.

Не по теме:


Сам бы прочитал ссылочку, что привел. Там же все это написано... >_>

castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,021
Записей в блоге: 10
Завершенные тесты: 1
23.04.2013, 00:02     Дописать к классу Fraction конструктор по умолчанию #9
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Сам бы прочитал ссылочку, что привел. Там же все это написано.
В том то и дело, что у него есть конструкторы, а ты предлагаешь ему написать еще один - конструктор по-умолчанию.

Цитата Сообщение от nonedark2008 Посмотреть сообщение
... которые ничего не делают ...
Если он ничего не делает, тогда зачем он нужен?)
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
23.04.2013, 00:34     Дописать к классу Fraction конструктор по умолчанию #10
Цитата Сообщение от lazybiz Посмотреть сообщение
предлагаешь ему написать еще один - конструктор по-умолчанию.
Предлагаю написать конструктор с числителем и знаменателем в качестве аргументов.
Цитата Сообщение от lazybiz Посмотреть сообщение
Если он ничего не делает, тогда зачем он нужен
Если создается переменная, и при ее инициализации не указываются параметры, то вызывается конструктор по умолчанию. Даже, если пользователь не задавал никаких конструкторов, то должен быть по крайней мере по умолчанию, хоть и фиктивный.
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,021
Записей в блоге: 10
Завершенные тесты: 1
23.04.2013, 00:39     Дописать к классу Fraction конструктор по умолчанию #11
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Предлагаю написать конструктор с числителем и знаменателем в качестве аргументов.
Но это же не будет являться конструктором по-умолчанию.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
23.04.2013, 00:44     Дописать к классу Fraction конструктор по умолчанию #12
Цитата Сообщение от lazybiz Посмотреть сообщение
Но это же не будет являться конструктором по-умолчанию.
Я и не писал, что нужен конструктор по умолчанию. Даже скажу больше - он уже есть среди двух написанных.
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,021
Записей в блоге: 10
Завершенные тесты: 1
23.04.2013, 00:59     Дописать к классу Fraction конструктор по умолчанию #13
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Я и не писал, что нужен конструктор по умолчанию
Ты не писал что он нужен, ТС попросил написать его, а ты предложил написать его самому. Тем самым подразумевая что он может там быть. Хотя его там быть никак не может, т.к. там уже есть конструкторы.

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Даже скажу больше - он уже есть среди двух написанных.
Да нет его среди двух написаных.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
23.04.2013, 01:03     Дописать к классу Fraction конструктор по умолчанию #14
lazybiz,
Цитата Сообщение от masyk Посмотреть сообщение
Fraction::Fraction() : den(1), num() { }
Не стоит вводить других в заблуждение.
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,021
Записей в блоге: 10
Завершенные тесты: 1
23.04.2013, 01:07     Дописать к классу Fraction конструктор по умолчанию #15
И не собирался вводить, а что это?
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
23.04.2013, 01:08     Дописать к классу Fraction конструктор по умолчанию #16
Цитата Сообщение от lazybiz Посмотреть сообщение
И не собирался вводить, а что это?
T_T Конструктор по умолчанию...
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,021
Записей в блоге: 10
Завершенные тесты: 1
23.04.2013, 01:20     Дописать к классу Fraction конструктор по умолчанию #17
Само выражение "конструктор по-умолчанию" явно подразумевает то, что его создаёт не пользователь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2013, 01:27     Дописать к классу Fraction конструктор по умолчанию
Еще ссылки по теме:

C++ Дописать все возможные конструкторы к классу
C++ Дописать к классу Date метод IncrementDate
Дописать классу арифметические действия C++

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

Или воспользуйтесь поиском по форуму:
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
23.04.2013, 01:27     Дописать к классу Fraction конструктор по умолчанию #18
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от lazybiz Посмотреть сообщение
подразумевает то, что его создаёт не пользователь.
Единственное, что он подразумевает это то, что он используется по умолчанию.
Пример, шоб нехер:
C++
1
2
3
4
5
6
7
struct Abc {
  int x;
};
 
void main( void ) {
  Abc x;
}
Тута вызовется фиктивный конструктор по умолчнаию, который забабахал компилятор.

C++
1
2
3
4
5
6
7
8
9
struct Abc {
  int x;
  Abc( int x) : this.x(x) {
  }
};
 
void main( void ) {
  Abc x;
}
Тута вылезет ошибка, т.к. есть заданный пользователем конструктор и поэтому компилятор не вставляет свой конструктор по умолчанию.
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct Abc {
  int x;
  Abc( void ) : this.x(0) {
  }
 
  Abc( int x ) : this.x(x) {
  }
};
 
void main( void ) {
  Abc x;
}
Тута уже будет все в норме и вызовется конструктор по умлочанию Abc( void ), который задал пользователь.
Yandex
Объявления
23.04.2013, 01:27     Дописать к классу Fraction конструктор по умолчанию
Ответ Создать тему
Опции темы

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