Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 20.10.2012
Сообщений: 34
1

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

22.04.2013, 23:11. Показов 1286. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
кто может дописать к классу конструктор по умолчанию, с параметрами, копирования и деструктор
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;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2013, 23:11
Ответы с готовыми решениями:

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1)...

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно»
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по...

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

Конструктор с параметрами И конструктор по умолчанию. Как?
Опять прошу совета. Выполняю тут из интернета задания. Класс надо создать, там будут конструкторы и...

17
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
22.04.2013, 23:38 2
Я могу, мысленно..
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
22.04.2013, 23:42 3
Цитата Сообщение от masyk Посмотреть сообщение
копирования и деструктор
Не нужны, ибо - они не нужны.

Добавлено через 39 секунд
Цитата Сообщение от masyk Посмотреть сообщение
дописать к классу конструктор
А самому? Два уже есть, осталось написать еще один. Неее?
0
1 / 1 / 0
Регистрация: 20.10.2012
Сообщений: 34
22.04.2013, 23:43  [ТС] 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);
}
немогу полностью розобратса в коде!!прокоментируйте плис
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
22.04.2013, 23:44 5
Цитата Сообщение от nonedark2008 Посмотреть сообщение
А самому? Два уже есть, осталось написать еще один. Неее?
Скажи мне, я ничего не путаю? http://ru.wikipedia.org/wiki/%... 0%B8%D1%8E
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
22.04.2013, 23:49 6
Цитата Сообщение от lazybiz Посмотреть сообщение
Скажи мне, я ничего не путаю?
Эмм, я пока не понимаю, что ты собираешься путать, и что мне нужно сказать...
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
22.04.2013, 23:52 7
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Эмм, я пока не понимаю, что ты собираешься путать, и что мне нужно сказать...
Либо я туплю под вечер, либо одно из двух.. Разве конструктор по-умолчанию это не то что компилятор создает сам?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
22.04.2013, 23:56 8
Цитата Сообщение от masyk Посмотреть сообщение
или например розьяснить что ето
Эмм. Если ВСЕ не понятно, то объяснять слишком долго. Возьми книжицу по C++ и почитай. Там будет все, что нужно: и классы, и конструкторы, и деструктор, и перегрузка операторов.
А потом можно открыть книжицу с алгоритмами и узнать как сокращать дроби, что такое GCD и т.д.
Кстати, метод "Я тут что-то скопировал - объясните что это такое" не поможет в понимании языка.

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

Не по теме:


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

0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
23.04.2013, 00:02 9
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Сам бы прочитал ссылочку, что привел. Там же все это написано.
В том то и дело, что у него есть конструкторы, а ты предлагаешь ему написать еще один - конструктор по-умолчанию.

Цитата Сообщение от nonedark2008 Посмотреть сообщение
... которые ничего не делают ...
Если он ничего не делает, тогда зачем он нужен?)
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
23.04.2013, 00:34 10
Цитата Сообщение от lazybiz Посмотреть сообщение
предлагаешь ему написать еще один - конструктор по-умолчанию.
Предлагаю написать конструктор с числителем и знаменателем в качестве аргументов.
Цитата Сообщение от lazybiz Посмотреть сообщение
Если он ничего не делает, тогда зачем он нужен
Если создается переменная, и при ее инициализации не указываются параметры, то вызывается конструктор по умолчанию. Даже, если пользователь не задавал никаких конструкторов, то должен быть по крайней мере по умолчанию, хоть и фиктивный.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
23.04.2013, 00:39 11
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Предлагаю написать конструктор с числителем и знаменателем в качестве аргументов.
Но это же не будет являться конструктором по-умолчанию.
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
23.04.2013, 00:44 12
Цитата Сообщение от lazybiz Посмотреть сообщение
Но это же не будет являться конструктором по-умолчанию.
Я и не писал, что нужен конструктор по умолчанию. Даже скажу больше - он уже есть среди двух написанных.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
23.04.2013, 00:59 13
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Я и не писал, что нужен конструктор по умолчанию
Ты не писал что он нужен, ТС попросил написать его, а ты предложил написать его самому. Тем самым подразумевая что он может там быть. Хотя его там быть никак не может, т.к. там уже есть конструкторы.

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Даже скажу больше - он уже есть среди двух написанных.
Да нет его среди двух написаных.
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
23.04.2013, 01:03 14
lazybiz,
Цитата Сообщение от masyk Посмотреть сообщение
Fraction::Fraction() : den(1), num() { }
Не стоит вводить других в заблуждение.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
23.04.2013, 01:07 15
И не собирался вводить, а что это?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
23.04.2013, 01:08 16
Цитата Сообщение от lazybiz Посмотреть сообщение
И не собирался вводить, а что это?
T_T Конструктор по умолчанию...
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
23.04.2013, 01:20 17
Само выражение "конструктор по-умолчанию" явно подразумевает то, что его создаёт не пользователь.
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
23.04.2013, 01:27 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 ), который задал пользователь.
0
23.04.2013, 01:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2013, 01:27
Помогаю со студенческими работами здесь

Дописать классу арифметические действия
Помогите. Нужно сделать сложение, вычитание, умножение и деление. #include &lt;iostream&gt; using...

Дописать функционал к классу матриц
Всем привет,написал класс матриц со следующими операциями +,-,*,=,=! .Мой преподаватель говорит что...

Дописать к классу Date метод IncrementDate
Используя класс Date. Изменить класс Date для включения метода IncrementDate. Он принимает...

нужно дописать методы к созданному классу!
у меня есьть клас &quot;система обслуживания' с полями, помогите пожалуста,кто может, как написать к...

Дописать все возможные конструкторы к классу
Добрый день, вот я написал такую программу, а мне ее сейчас необхоимо переделать, чтобы она...

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru