Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2013, 09:57   #1
Император
Новичок
Джуниор
 
Регистрация: 16.08.2013
Сообщений: 1
По умолчанию Работа с классами

Составить описание класса. Определить конструктор по умолчанию, конструктор с параметрами и методы класса. Написать программу, демонстрирующую работу с классом для работы с рациональными дробями вида m/n, где m и n – целые числа. Реализовать методы класса: ввод дроби; сложение двух дробей; вычитание двух дробей; умножение двух дробей.
Император вне форума Ответить с цитированием
Старый 16.08.2013, 10:08   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

книги вам в помочь клик
или же выкладываем наработки (весьма желательно свои),и будем помогать то что не получается...
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 16.08.2013, 10:42   #3
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Инстерен было бы взглнуть на наработки, если таковые имеются..
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 16.08.2013, 18:31   #4
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Очень хорошая задача. Показательная. Просьба к автору темы - поактивнее участвовать и показывать свои соображения в виде идей и кода. Из этой простой задачки можно извлечь кучу полезного.
8Observer8 вне форума Ответить с цитированием
Старый 16.08.2013, 18:39   #5
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Цитата:
Сообщение от Император Посмотреть сообщение
Реализовать методы класса: ввод дроби;
Ха-ха-ха! Типичная ошибка декомпозиции. Если таковы задания в универах, мы потом еще удивляемся, откуда берутся быдлокодеры.
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Старый 16.08.2013, 19:11   #6
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Vapaamies, согласен. operator* должно быть отдельной функцией, а не функцией-членом и не другом класса. Об этом можно почитать здесь: http://lib.rus.ec/b/269732/read

Смотри: "Правило 24: Объявляйте функции, не являющиеся членами, когда преобразование типов должно быть применимо ко всем параметрам"

Там как раз этот пример.

Последний раз редактировалось 8Observer8; 16.08.2013 в 19:19.
8Observer8 вне форума Ответить с цитированием
Старый 16.08.2013, 19:17   #7
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Ха-ха-ха! Типичная ошибка декомпозиции. Если таковы задания в универах, мы потом еще удивляемся, откуда берутся быдлокодеры.
МБ расскажешь подробнее в чем ошибка? - я наверное быдлокодер, но ничего предрассудительного в задаче не вижу ))

Цитата:
Vapaamies, согласен. operator* должно быть отдельной функцией, а не функцией-членом и не другом класса. Об этом можно почитать здесь: http://lib.rus.ec/b/269732/read

Смотри: "Правило 24: Объявляйте функции, не являющиеся членами, когда преобразование типов должно быть применимо ко всем параметрам"
Мне тоже нравится Мейрес за свои "и так понятные", но все равно полезные советы ) Однако, этот совет лишь боком касается дружбы. То что оператор умножения не должен быть членом понятно и без толстых книг. Другом он быть может. Но дружба - это плохо и лишь поэтому Мейерс грит, дескать "тут можно обойтись без дружбы" - но это у него там можно обойтись, но ТС может полениться написать геттеры и сеттеры (а задании не требуется) и тогда без дружбы не обойдется )

Последний раз редактировалось rrrFer; 16.08.2013 в 19:29.
rrrFer вне форума Ответить с цитированием
Старый 16.08.2013, 19:35   #8
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Вот автору в помощь. Здесь реализован вывод дроби на экран в виде:

Код:
    Rational r(1, 2);
    std::cout << r << std::endl;
Output:
Цитата:
1/2
Умножение реализуйте, пожалуйста, сами и выложите здесь. Вот класс с функциями доступа к членам класса и оператором вывода:

main.cpp
Код:
class Rational {
public:

    Rational(int numerator = 0, int denominator = 1)
    : m_numerator(numerator), m_denominator(denominator) {
    }
    void setNumerator(int n);
    void setDenominator(int d);
    int getNumerator() const;
    int getDenominator() const;

private:
    int m_numerator;
    int m_denominator;
};

#include <ostream>

std::ostream& operator <<(std::ostream& stream, const Rational& r) {
    stream << r.getNumerator() << "/" << r.getDenominator();
}

int Rational::getNumerator() const {
    return m_numerator;
}

int Rational::getDenominator() const {
    return m_denominator;
}

void Rational::setNumerator(int n) {
    m_numerator = n;
}

void Rational::setDenominator(int d) {
    m_denominator = d;
}

#include <iostream>

int main(int argc, char** argv) {
    Rational r(1, 2);

    std::cout << r << std::endl;

    return 0;
}
А то правило по ссылке выше прочитайте и расскажите преподавателю, почему плохо реализовывать оператор умножения, как функцию класса. Только прочитайте обязательно то правило и разберитесь хорошенько.

Переходите по перекрёстным ссылкам, когда будите читать. Особенно в этом моменте:

Код:
class Rational {
public:
...
const Rational operator*(const Rational& rhs) const;
}
Цитата:
Если вы не понимаете, почему эта функция объявлена именно таким образом (возвращает константный результат по значению и принимает ссылку на const в качестве аргумента), обратитесь к правилам 3, 20 и 21.
8Observer8 вне форума Ответить с цитированием
Старый 16.08.2013, 19:37   #9
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
ТС может полениться написать геттеры и сеттеры (а задании не требуется) и тогда без дружбы не обойдется )
Это ещё один огромный минус нашим преподам в универах научили блин...

Они, видимо, таких книг не читают и опыта у них нет. Я имею ввиду, таких преподов, которые дают подобные задания.

Последний раз редактировалось 8Observer8; 16.08.2013 в 19:41.
8Observer8 вне форума Ответить с цитированием
Старый 16.08.2013, 19:56   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я пока тоже не понял в чем же ошибка преподавателей. Где вы там нашли быдлокодерство в задании?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с классами АндрейBAN C# (си шарп) 4 17.12.2012 13:10
Работа с классами на С++ darinadarina Помощь студентам 1 08.05.2012 18:34
Работа с классами petrovich2005 Помощь студентам 2 24.06.2011 17:32
Работа с классами Superlotles Общие вопросы C/C++ 6 16.06.2010 17:15
С++: работа с классами MR_Andrew Общие вопросы C/C++ 23 01.04.2010 23:46