|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.11.2010, 23:12 | #31 | |||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Цитата:
в принципе можно решить, подобием иерархии классов, то есть по ней можно идти только вверх(при автоприведении в операторах), а при присваинии разрешить ход вниз, но хорош ли метод? или же разрешить компилю менять слагаемые/множители местами согласно иерархии или наличию операторов(удобно например если класс A не знает о классе B(на уровне операторов) но класс B знает об A, а выражение такого A=A+B, правда код не очень оптимален выйдет, но работать будет(естественно если класс B имеет приведение к A)) Цитата:
в случае проблем или же спорных вариантов, буду просить совета, а то мало ли наделаю глупостей.. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 13.11.2010 в 23:15. |
|||
14.11.2010, 10:16 | #32 | ||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Если в языке будет возможна перегрузка и + и +=, то это выльется в грабли. Перегрузка этих двух операторов может быть кардинально различаться, в итоге в коде мы запрашиваем одну реализацию, а компилятор подставляет другую. Пожалуй, так лучше не делать. Или же кардинально менять механизмы перегрузки операторов и делать не как в С++.
Цитата:
Код:
Цитата:
2. Код будет запутан и трудночитаем. Программист не сможет так слёту сказать какой именно оператор и для какого класса вызовется в конкретном месте. Для поиска ошибок придётся больше анализировать, учитывая особенности компилятора. Ну тогда позволю себе высказать мнение (просто опишу в каком направлении я бы двигался, ни в коем случае это не совет, но может на что натолкнёт). Так вот начнём издалека: вспомним, что все мы являемся пользователями ПК и используем всякие программы. Допустим, нужно создать документ (курсовую, к примеру). Текста много - значит используем Word (ну или Writer или как там его в Oo зовут). Пишем пишем, а потом бац... схему нужно нарисовать. Берём visio или еще какую программу и рисуем схему там. Потом эту схему сохраняем как картинку, вставляем в ворд,... а потом еще табличка сложная понадобится и придётся мучиться с ней в ворде или делать её отдельно в Excel'e... В итоге наш единый документ раскидан по разным файлам, распечатать одним кликом мы его не можем, вручную правим нумерацию страниц,... В итоге получаем несоответствие реального объекта (распечатанного единого курсовика) и виртуального его воплощения. Теперь вернёмся к нашим операторам. Что есть + по идее? Математическая операция сложение, для которой существуют свои законы (перемена мест слагаемых и всё такое). Так же в математике есть свои правила сложения матриц, матрица + вектор,... Если брать С++, то каждый программист сам прописывает все эти правила (причём может это сделать неправильно, что-то не учесть, пропустить, или специально исказить, потому что ему так удобнее). Причем в некоторых случаях таки важен порядок слагаемых, а в некоторых - нет (матрица + вектор != вектор + матрица). Так же отдельный разговор тут с пользовательскими классами, т.к. там уже я обязан задавать правила сложения двух сотрудников, если вдруг такая глупость приспичит. Отдельный вопрос вообще в необходимость разрешения такого. Может стоит сделать + чисто математической штуковиной и позволять складывать только математические данные. Я как программист хочу получить сумму двух матриц, но я не хочу, при использовании матриц из двух разных библиотек, вспоминать как это делается и реализовывать ради этого ручками оператор сложения (да ещё и в двух экземплярах). Но вот как это сделать... Можно натыкать интерфейсы матрицы, целого числа, вещественного числа и, если кому нужно, пусть реализует эти интерфейсы и автоматом получает возможность краткой записи а = а + b. При этом реализация операторов будет на совести компилятора и запрещена для изменения. Можно забить и пусть все пишут неявные преобразования, чтобы втихую матрицы для сложения приводились к некоему базовому типу (это собственно возможно и в С++ и частенько используется, но если автор библиотеки об этом не позаботился, то приплыли и придётся городить огород). В общем, я хочу больше думать над задачей (нужно ли мне вообще складывать матрицы?), чем над её реализации (а как бы мне их сложить лучше... у них и тип разный и размерность... как уж это там в математике делается...) |
||
14.11.2010, 12:31 | #33 | |||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
но на мой взгляд как то не оч, я прав? Цитата:
Цитата:
хотя насчет интерфейсов...не знаю, помоему это как то ограничивает прогера всетаки.. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 14.11.2010 в 12:34. |
|||
15.11.2010, 06:59 | #34 | ||
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 15.11.2010 в 07:01. |
||
22.11.2011, 17:24 | #35 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
вообще поразмыслив, подумал ограничения нужны. точнее строгие правила. но теперь надо немного обдумать правила. думаю: 1)запретить перегружать одновременно и += и +, только что-то одно(второе реализуется автоматически) 2)логические операторы реализуются группами(группа минимум это == и !=(причем достаточно и одного, второй может быть дополнен автоматом), группа максимум это >=,<=,<,>,==,!=(аналогично дополнение пары)) 3)наследование как в Джава и ДотНет(один родитель, множество реализаций интерфейса) 4)сборка мусора через подсчет ссылок(автомат, с возможностью освободить объект ранее(но компиль будет отслеживать обращение к пустому объекту)) 5)концепция ссылок, чтото близкое к Obj-C, обращение в ноль выдаст исключение(данное поведение контролируемо), но обработчик по умолчанию его не покажет(игнор). 6)ссылки авто-обновляемы, то есть двухсторонняя связь объект-ссылка(ссылки), то есть ссылка автоматически начинает вести в ноль. ...(потом еще) пока правда думаю что делать с базовыми типами.(их объектами делать то не нужно(в куче)) думаю сделать регулируемый оператор присваивания(или увеличение ссылки или копирование).(в зависимости от типа объекта) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
22.11.2011, 19:54 | #36 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
И того получился C# )))
По мне так, в C++ на сегодняшний день есть почти все. Замечу что не хватает такой удобной штуки как delegate в C#. Уж очень не удобно реализовывать ссылки на методы классов, особенно когда методы разных классов имеют одинаковые сигнатуры, то тут одним typedef не обойтись, но хотелось бы. И вообще хочу чтобы в C++ был тип типа =))) Ну т.е. Type t(int); t i = 0; И я был бы счастлив ))) |
22.11.2011, 20:40 | #37 | |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
Цитата:
Код:
Код:
|
|
23.11.2011, 09:11 | #38 | |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
Пепел Феникса
Цитата:
|
|
23.11.2011, 11:53 | #39 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
23.11.2011, 12:03 | #40 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
можно ли подобный текст перевести на человеческий язык? | alexxx777 | Помощь студентам | 0 | 24.05.2010 19:56 |
Как создать вид подобный SolidWorks. | KemanSR | Общие вопросы C/C++ | 6 | 04.05.2010 21:30 |
Добавить модуль в phpnuke-подобный движок | Able2Know | Фриланс | 3 | 23.04.2010 16:29 |
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? | An_ton | SQL, базы данных | 5 | 16.01.2009 17:55 |