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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2013, 13:29   #21
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Что-то я запутался... В противоположенность оператору вывода - операция умножения целого числа на дробь свойственна дробям?
Ну на самом деле нет. Это если говорить о чистоте арийской крови. Новые языки знают об этом, такие как Руби и с#, старые наспех переориентируются. У них и числа объекты и операции не просто звездочка, а со своим поведением, решающим что множить, а что нет. А не просто умолчания - типа ты же человек и так должен знать, что значит умножение. Я то может и знаю, что такое умножение, а вот звездочка о новых типах данных не знает (и знать не желает).
Если же не подниматься до таких высот то, операция умножения должна быть свойственна дробям. Но, чувствуется подмена понятий, между реальной возможностью сделать себе умножение и мифической возможностью правильно перегрузить умножение. Реально можно набацать обычных методов которые будут скрещивать ежей с ужами (банальное неявное преобразование числа к числу деленному на 1). И да если Вы почитываете умные книжки, то тоже должны знать, что перегрузка сама по себе вещь не самая удачная и эффективность ее внедрения и использования на совести программера.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 21.08.2013, 14:13   #22
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Как в данном случае (для класса "Дробь") всё же поступить (я не имею ввиду решение задачи студента, а реальный класс):

1) Запретить умножать "целое число" на "дробь"
- запретить неявное приведение типов (добавить explicit перед конструктором)
- реализовать оператор умножения, как член-функцию класса "Дробь"

2) Разрешить умножать "целое число" на "дробь"
- разрешить неявное приведение типов (не добавлять explicit перед конструктором)
- реализовать оператор умножения, как свободную функцию (вне класса "Дробь")
8Observer8 вне форума Ответить с цитированием
Старый 21.08.2013, 17:02   #23
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Потому что числам не свойственно выводится на экран. Этим должен заниматься хранилище чисел или контроллер, не важно как оно там называется. Но не числа. Числа могут предоставлять информацию о себе в обобщенном ввиде, а уже другой класс через всякие интерфейсы и прочие полиморфизмы решает как и через что выводить числа.
Ну вот бредовая аналогия - я вот посчитал на калькуляторе два числа, а они хлоп! и сами на бумажку записались. Блин, удобно, но записываются карандашом. А мне надо ручкой гелевой.
Довай продолжим бредовую аналогию. Ты купил калькулятор, что по посчитал, но ничего не получил (тебе надо докупить И ПРИКРУТИТЬ экран) -тоже неприятная ситуация. Продолжим еще, в теме речь велась о вводе и выводе - прикинь что кнопки к калькулятору надо тоже приделывать отдельно. - мне такой калькулятор нахрен ненужен, даже если он будет позволять мне прикрутить экран с розовыми цифрами и разным шрифтом (в калькулятор это ваще неважно).

Все что ты описываешь - хорошо, если система реально может работать с разными видами. Против MVC я ниче не имею, но вкручивать его куда-ни-попадя не стоит, это лишнее нагромождение, зачастую.

Цитата:
Как в данном случае (для класса "Дробь") всё же поступить
да как угодно. Задача ведь взята "с потолка". Ты ведь понимаешь, что умножать целое на дробь может быть удобно (это хорошо), но это может быть опасно (это плохо).
rrrFer вне форума Ответить с цитированием
Старый 21.08.2013, 17:27   #24
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
да как угодно. Задача ведь взята "с потолка". Ты ведь понимаешь, что умножать целое на дробь может быть удобно (это хорошо), но это может быть опасно (это плохо).
Как бы поступил профи-разработчик, если этот класс потом будет использовать множество людей?

И почему опасно?
8Observer8 вне форума Ответить с цитированием
Старый 21.08.2013, 17:48   #25
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Как в данном случае (для класса "Дробь") всё же поступить (я не имею ввиду решение задачи студента, а реальный класс):
Эта борьба противоположнстей обычно решается программистом исходя из пятен на солнце. Тут важен общий принцип, дух, красная нить тянущаяся через весь проект. Если ты сторонник харда (всякие делфи, си++ и прочее) то твой код должен быть прямой как доска. Небритость, стальной взгляд и прочая брутальность. Если твой знак янь, то однозначно второй пункт (ну и покровительствующие эзотерические знаки - бейсик, пхп, руби наверно и прочее). Тут уже жизненные принципы Ганди.
Цитата:
Довай продолжим бредовую аналогию. Ты купил калькулятор, что по посчитал, но ничего не получил (тебе надо докупить И ПРИКРУТИТЬ экран) -тоже неприятная ситуация. Продолжим еще, в теме речь велась о вводе и выводе - прикинь что кнопки к калькулятору надо тоже приделывать отдельно. - мне такой калькулятор нахрен ненужен, даже если он будет позволять мне прикрутить экран с розовыми цифрами и разным шрифтом (в калькулятор это ваще неважно).
Любую вещь можно довести до крайности, но здесь ошибка на лицо. Я говорю о двух категориях - числах (объекты) и калькуляторе (хранилище объектов). Вы говорите о калькуляторе (контроллере, хранилище объектов и т.д.).
Цитата:
Против MVC я ниче не имею, но вкручивать его куда-ни-попадя не стоит, это лишнее нагромождение, зачастую.
Я так вообще, общие принципы, внезависимости от инструмента.
Цитата:
Ты ведь понимаешь, что умножать целое на дробь может быть удобно (это хорошо), но это может быть опасно (это плохо).
Я тоже не понял где опасно. Объясните, что Вы здесь имели ввиду?

Система с дробями работает в Scheme (там есть целые, дробные (в смысле дробь с палочкой между двумя целыми), дробные (в смысле числа с точкой) и комплексные). Хитрозадая система использует свое представление чисел (в общем случае без регистров процессора) и только когда операция укладывается в регистры, она и считается там.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 21.08.2013 в 17:51.
Utkin вне форума Ответить с цитированием
Старый 21.08.2013, 17:54   #26
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Эта борьба противоположнстей обычно решается программистом исходя из пятен на солнце. Тут важен общий принцип, дух, красная нить тянущаяся через весь проект. Если ты сторонник харда (всякие делфи, си++ и прочее) то твой код должен быть прямой как доска. Небритость, стальной взгляд и прочая брутальность. Если твой знак янь, то однозначно второй пункт (ну и покровительствующие эзотерические знаки - бейсик, пхп, руби наверно и прочее). Тут уже жизненные принципы Ганди.
Ха-ха! Прикольный ответ! Плюсую!

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

Цитата:
Я тоже не понял где опасно. Объясните, что Вы здесь имели ввиду?
опасно неявное приведение. в 14 посте был пример

Хотя, там был неверный пример )
компилятор сообщит об ошибке. Ну суть примерно ясна, наверное.

Примеры всегда можно найти в интернете: http://stackoverflow.com/questions/1...word-in-c-mean
Цитата:
You have a MyString(int size) class with a constructor that constructs a string of the given size. You have a function print(MyString&), and you call it with print(3). You expect it to print "3", but it prints an empty string of length 3 instead.

Последний раз редактировалось rrrFer; 21.08.2013 в 20:42.
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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